(1)在非特殊字符之前的反斜杠表示下一个字符是特殊的,不能从字面上解释。例如,没有前面''的'b'通常匹配小写'b',无论它们出现在哪里。如果加了'',这个字符变成了一个特殊意义的字符,意思是匹配一个字符边界。 (2)反斜杠也可以将其后的特殊字符,转义为字面量。例如,模式 /a*/ 代表会匹配 0 个或者多个 a。相反,模式 /a*/ 将 '*' 的特殊性移除,从而可以匹配像 "a*" 这样的字符串。
^ (1)匹配输入的开始。如果多行标志被设置为true,那么也匹配换行符后紧跟的位置。例如,/^A/ 并不会匹配 "an A" 中的 'A',但是会匹配 "An E" 中的 'A'。
$ (1)匹配输入的结束 例如,/t$/ 并不会匹配 "eater" 中的 't',但是会匹配 "eat" 中的 't'。 * (1)匹配前一个表达式0次或多次。等价于 {0,}。
(1)匹配前一个表达式1次或多次。等价于 {1,}。 ? (1)匹配前面一个字符0次或者1次。等价于 {0,1}。 例如,/e?le?/ 匹配 "angel" 中的 'el',和 "angle" 中的 'le' 以及"oslo' 中的'l'。 (2)如果紧跟在任何量词* ? 或者{}的后面,将会使量词变成非贪婪,如正常情况123abc" 应用 /d / 将会返回 "123",如果使用 /d ?/,那么就只会匹配到 "1"。
. (1) (小数点)匹配除了换行符(n)之外的任何单个字符。例如,/.n/将会匹配 "nay, an apple is on the tree" 中的 'an' 和 'on',但是不会匹配 'nay'。
(x) (1) 匹配 'x' 并且记住匹配项,就像下面的例子展示的那样。括号被称为 捕获括号。 (2) 模式 /(foo) (bar) 1 2/ 中的 '(foo)' 和 '(bar)' 匹配并记住字符串 "foo bar foo bar" 中前两个单词。模式中的 1 和 2 匹配字符串的后两个单词。 (3) 注意 1、2、n 是用在正则表达式的匹配环节。在正则表达式的替换环节,则要使用像 $1、$2、$n 这样的语法,例如,'bar foo'.replace( /(...) (...)/, '$2 $1' )。
(?:x) (1) 匹配 'x' 但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式 /(?:foo){1,2}/。 如果表达式是 /foo{1,2}/,{1,2}将只对 ‘foo’ 的最后一个字符 ’o‘ 生效。如果使用非捕获括号,则{1,2}会匹配整个 ‘foo’ 单词
x(?=y) (1)匹配'x'仅仅当'x'后面跟着'y'.这种叫做正向肯定查找。只匹配x ,/Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着'Sprat'或者是‘Frost’。 但是‘Sprat’和‘Frost’都不是匹配结果的一部分。 "paramName".split(/(?=[A-Z])/) 返回结果为["param","Name"];
x(?!y) (1)匹配'x'仅仅当'x'后面不跟着'y',这个叫做正向否定查找。 例如,/d (?!.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/d (?!.)/.exec("3.141")匹配‘141’但是不是‘3.141’
x|y (1)匹配‘x’或者‘y’。例如,/green|red/匹配“green apple”中的‘green’和“red apple”中的‘red’ {n} (1)n是一个正整数,匹配了前面一个字符刚好发生了n次。比如/a{2}/会匹配“caandy”中所有的a,以及“caaandy”中的前两个'a'。
{n,m} (1)n 和 m 都是正整数。匹配前面的字符至少n次,最多m次。如果 n 或者 m 的值是0, 这个值被忽略。 (2)/a{1, 3}/,匹配“caandy”中得前两个a,也匹配“caaaaaaandy”中得前三个a。
[xyz] (1)一个字符集合。匹配方括号的中任意字符。你可以使用破折号(-)来指定一个字符范围。 (2)对于点(.)和星号(*)这样的特殊符号在一个字符集中没有特殊的意义。他们不必进行转意,不过转意也是起作用的。 (3)例如,[abcd] 和[a-d]是一样的。他们都匹配"brisket"中得‘b’,也都匹配“city”中的‘c’。/[a-z.] / 和/[w.] /都匹配“test.i.ng”中得所有字符。 下面的例子是验证输入框的值为1-10 <script> function myFunction() { var x = document.getElementById("numb").value; if (/^([0-9]|10)$/.test(x)) { alert("ok") } else { alert("no") } } </script>
[^xyz] (1)它匹配任何没有包含在方括号中的一个字符 ,例如,[^abc] 和 [^a-c] 是一样的。他们匹配"brisket"中得‘r’,也匹配“chop”中的‘h’。 (2)一个中括号[]表示匹配一个字符,第一个字符匹配上了,就不会管剩下的字符了。如果要匹配这多个字符。[^abc]*
[b] (1)匹配一个退格(U 0008)。(不要和b混淆了。) b (1)匹配一个单词的边界 例如:/bm/匹配“moon”中得‘m’;/oonb/匹配"moon"中得'oon' B (1)匹配一个非单词边界 /B../匹配"noonday"中得'oo', 而/yB./匹配"possibly yesterday"中得’ye‘ d (1)匹配一个数字,等价于[0-9]。例如, /d/ 或者 /[0-9]/ 匹配"B2 is the suite number."中的'2'。
D (1)匹配一个非数字字符。等价于[^0-9]。例如, /D/ 或者 /[^0-9]/ 匹配"B2 is the suite number."中的'B' 。 f (1)匹配一个换页符 (U 000C)。 n (1)匹配一个换行符 (U 000A)。 r (1)匹配一个回车符 (U 000D)。
s (1)匹配一个空白字符,包括空格、制表符、换页符和换行符。例如, /sw*/ 匹配"foo bar."中的' bar'。 S (1)匹配一个非空白字符。例如, /Sw*/ 匹配"foo bar."中的'foo'。
t (1)匹配一个水平制表符 (U 0009)。 v (1)匹配一个垂直制表符 (U 000B)。
w (1)匹配一个单字字符(字母、数字或者下划线)。等价于[A-Za-z0-9_]。例如, /w/ 匹配 "apple," 中的 'a',"$5.28,"中的 '5' 和 "3D." 中的 '3'。 W (1)匹配一个非单字字符,等价于[^A-Za-z0-9_]。例如, /W/ 或者 /[^A-Za-z0-9_]/ 匹配 "50%." 中的 '%'。
正则表达式的方法 exec:一个在字符串中查找匹配RegExp方法,它返回一个数组(未匹配到则返回null) test:一个在字符串中测试是否匹配的RegExp方法,它返回true 或false match:一个在字符串中执行查找匹配的string方法,它返回一个数组或者在未匹配时返回null search:一个在字符串中测试匹配的string方法,它返回匹配到的位置索引,或者在失败时返回-1 replace:一个在字符串中执行查找匹配的string方法,并且使用替换字符串替换掉匹配到的字符串 split:一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的字符串存储到数组中的string方法
exec 与 match的区别
1.match match方法属于String正则表达方法. 语法: str.match(regexp) str:要进行匹配的字符串. regexp:一个正则表达式(或者由RegExp()构造成的正则表达式) match的用法主要区分就是,正则表达式是否有全局标示g. 1)如果有g全局标志,那么返回的数组保存的是,所有匹配的内容. 2)如果没有g全局标志,那么返回的数组arr.arr[0]保存的是完整的匹配.arr[1]保存的是第一个括号里捕获的字串,依此类推arr[n]保存的是第n个括号捕获的内容.
match没有g的情况 str = "abbb34eftab0modabbbbb6"; var reg = /a(b) (d )/i; var arr = str.match(reg); console.log(arr) arr ["abbb34", "b", "34"] match有g的情况 str = "abbb34eftab0modabbbbb6"; var reg = /a(b) (d )/ig; var arr = str.match(reg); ["abbb34", "ab0", "abbbbb6"]
2.exec 与match方法不同exec属于正则表达式的方法. 语法:var result1 = regexp.exec(str); regexp:正则表达式 str:要匹配的字串 exec与match的关联就是exec(g有没有都无影响)就等价于不含有g全局标志的match.即返回数组arr[0]为匹配的完整串.其余的为括号里捕获的字符串.
var str = "Visit W3School, W3School is a place to study web technology."; var patt = new RegExp("W3School","g"); var result; while ((result = patt.exec(str)) != null) { document.write(result); document.write("<br />"); document.write(patt.lastIndex); document.write("<br />"); } 显示结果 W3School 14 W3School 24
var str = "Visit W3School, W3School is a place to study web technology."; var patt = /W3School/g; var result=patt.exec(str); result 显示["W3School"]
[总结] 主要区分match具有g和没有g的区别.然后没有g的时候与exec是等价的. 而exec返回的串类型不受g影响但具有g时候会驱动lastIndex可以模拟遍历所有匹配.可以与match具有g的时候等价 ,与循环配合使用全局匹配(如while(){}).
var patt1=new RegExp("e","g"); while((result=patt1.exec("The best things in life are free"))!=null){console.log(result);}
//exec()不能在while 外面
(adsbygoogle = window.adsbygoogle || []).push({});