前言
接着例子详解正则表达式(二)>往下讲。
1.特殊字符:x(?=y)
上面说明已经很明白,()
里面就是一个控制流语句,x(?=y)
相当于:if(y){ x }
var str = "issax is not issac";
var pattern = /(?:issa)(?=x)/g;
console.log(str.replace(pattern, 'a'));
// 输出ax is not issac
上面的 pattern 中第一个()
中的正则语法在 例子详解正则表达式(一) 有详细说过,它是一个“非捕获符号”,结合结果你可以猜到,它的就用将“issa”捆绑成一块,作为一个整体去匹配。
第二个()
是本小节主角,按本小节的pattern解读就是:只有扫描到“issa”时,只有它后面紧接的是“x”才匹配。也是因此“issac”没有被匹配。
2.特殊字符:x(?!y)
会了第1小节中的正则语法,这一小节就好明白啦,就是来个否定而已,就直接上个例子了。
var str = "issax is not issac";
var pattern = /(?:issa)(?!x)/g;
console.log(str.replace(pattern, 'a'));
// 输出
3.特殊字符:x|y
这个符号的作用也是上面说的起到一个或的作用,相当于控制流中的||
,类比if(x || y){ }
,
var str = "issaxite is issacsite";
var pattern = /x|cs/g
console.log(str.replace(pattern, "c's"));
ps: ·|·是可以多次使用的。另外,由上面的例子结果可以看出,这个符号的作用是:以多个正则表达式去匹配。
4.特殊字符:{n}
n是一个正整数,正整数是1,2,3,...,n(不包括负数)
可以n指定前面的字符出现的次,还是比较简单,比较好理解的
var str = "nnnn and nnnnnn nnnnnnn is just n";
var pattern = /n{6}/g;
console.log(str.replace(pattern, 'n'));
很简单的解读:/n{6}/g
就相当于/nnnnnn/g
5.特殊字符:{n, m}
这个字符和第5小节中的字符的功能用点类似,但是本节的字符的作用不是指定某字符或单位字串出现的次数,而是指定某字符或某单位字串出现次数的范围,例如/n{2,3}/g
,即是匹配nn或nnn但是不匹配n或nnn...n
var str = "n nn nnn nnnn nnnnn nnnnnn nnnnnnn"; // 分别是1,2,3,4,5,6,7个n
var pattern = /n{2,3}/g
console.log(str.replace(pattern, "N"));
n的出现次数在范围内还好理解,但是超出了又怎么对待的?估计会有这个疑问,例子的输出结果好像已经解答了这个问题。
- 各位观众老爷,今天就到这里,且听下回分解。
ps: 网络不好,demo是回公司再补了