正则表达式是什么
正则表达式,简称regex。是用来匹配和处理文本的字符串
正则表达式可以包含纯文本,甚至可以只包含纯文本,比如Ben这个正则表达式,它将匹配原始文本中的Ben
匹配单个字符
正则表达式区分大小写
" . "字符可以匹配任何一个单个的字符,比如c.t可以匹配到cat 和cot
匹配特殊字符
加上\进行转义
匹配一组字符
元字符:
数字元字符:
\d:任何一个数字字符(等价于[0-9])
\D:任何一个非数字字符(等价于[ ^ 0-9])
\w:任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-zA-Z0-9_])
\W:任何一个非字母数字或非下划线字符(等价于[ ^a-zA-Z0-9])
\s:任何一个空白字符(等价于[\f\n\r\t\v])
\S:任何一个非空白字符(等价于[ ^ \f\n\r\t\v])
匹配十六进制:
使用前缀\x
匹配八进制:
使用前缀\0,比如\011对应于ASCII字符9(制表符),效果等效于\t
重复匹配
匹配同一个字符(或字符集合)的多次重复,只需加上后缀+,匹配一个或多个字符,比如[0-9]+匹配任意单个数字,a+匹配一个或者多个连续出现的a
*和+的区别在于,+至少匹配一次,而 *可以没有匹配
懒惰型元字符:*? +? {n,}?会尽可能少的匹配字符,而 * + {n,}这些元字符本身的行为模式是多多益善的
\b只能匹配一个位置,不匹配任何字符 \B表示不匹配边界
^除了求非的作用,还可以匹配字符串的开头位置
$匹配字符串结尾位置
分行匹配模式
分行匹配模式将使得正则表达式引擎把行分隔符当做一个字符串分隔符对待,在分行匹配模式下,^不仅匹配正常的字符串开头,还将匹配行分隔符(换行符后面的开始位置(该位置不可见),同理,$不仅匹配正常的字符串结尾,还将匹配行分隔符后面的结束位置
(?m)用来启用分行匹配模式。比如(?m)^\s* // .* $可以匹配到JavaScript文件中的所有注释
使用子表达式
子表达式是一个更大的表达式的一部分,子表达式必须用()括起来
前后匹配
向前查找指定了一个必须匹配但不在结果中返回的模式。
?=表示找到就行,不要把找到的这个串包括在最终的匹配结果中,即"不消费"
向后查找查找出现在被匹配文本之前的字符,但不"消费"该字符,操作符为?<=
向前查询和向后查询匹配本身是有返回结果的,只是这个结果的长度永远是0,前后查找操作也被称为零宽度匹配操作
嵌入条件
JavaScript中的正则表达式
JavaScript使用命令行选项来管理全局的区分大小写搜索,g选项激活全局搜索功能,i选项让匹配操作不区分字母的大小写,这两个选项可以组合为gi,m支持多行字符串,s支持单行字符串,x忽略正则表达式模式里的空白字符
JavaScript在String和RegEx方法对象的以下方法里实现了正则表达式处理:
exec:一个用来搜索一个匹配的RegEx方法。返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
<script type="text/javascript">
var str = "HelloWorld";
var patt = new RegExp("W","g");
var result;
while ((result = patt.exec(str)) != null) {
document.write(result);
document.write("<br />");
document.write(patt.lastIndex);
document.write("<br />");
}
/*
输出结果为:
W
6
*/
</script>
match:一个用来匹配一个字符串的String方法。存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
<script type="text/javascript">
var str="Hello world!"
document.write(str.match("world") + "<br />")
document.write(str.match("World") + "<br />")
document.write(str.match("worlld") + "<br />")
document.write(str.match("world!"))
/*
输出结果为
world
null
null
world!
*/
</script>
replace:一个用来完成替换操作的String方法。一个新的字符串,是用 第二个形参 替换了 regexp 的第一次匹配或所有匹配之后得到的。
<script type="text/javascript">
var str="Hello World!"
document.write(str.replace(/World/, "JavaScript"))
/*
输出为
Hello Javascript!
*/
</script>
search:一个用来测试在某给定字符串里是否存在着一个匹配的String方法。stringObject 中第一个与 regexp 相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回 -1。
注:search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。
<script type="text/javascript">
var str="Hello World"
document.write(str.search(/llo/))
/*结果为2*/
</script>
split:一个用来把一个字符串拆分成多个子串的String方法
<script type="text/javascript">
var str="How are you doing today?"
document.write(str.split(" ") + "<br />")
document.write(str.split("") + "<br />")
document.write(str.split(" ",3))
/*
How,are,you,doing,today?
H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
How,are,you
*/
</script>
test:一个用来测试在某给定字符串里是否存在着一个匹配的RegEx方法,返回一个布尔值