javascript正则表达式RegExp入门图文教程

2020-02-25 10:01:45王振洲

例子:将var str = "aabb"替换为"bbaa"

1. var reg = /(w)1(w)2/g;

console.log(str.replace(reg,"$2$2$1$1"));

输出结果为:"bbaa"

2. var reg = /(w)1(w)2/g;

console.log(str.replace(reg, function ($, $1, $2) {

return $2 + $2 + $1 + $1;

}));

输出结果为:"bbaa"

其中$为正则表达式全局,$1为第一个自变量 "(w)1",$2代表第二个自变量"(w)2";

例子:the-first-name 变为小头峰模式(theFirstName);

其中$为正则表达式全局,$1为第一个自变量 "-(w)"

正向预查(正向断言):在正则中只参与限定不参与选择

1.在正则表达式中查看 var str = "abaaaa"中身后带b的字符串,但输出时不显示b字符;

var str = "abaaaa";

var reg = /a(? = b)/g; //表示a后面跟着b但b参与选择只参与限定

2. 在正则表达式中查看 var str = "abaaaa"中身后不带b的字符串;

var reg = /a(? !b)/g; //表示查找a后没有b字符的字符串;

非贪婪匹配:正则表达式中默认贪婪匹配,但我们可以通过方法将贪婪匹配变为非贪婪匹配。在任何量词后加?

reg = /n{1,}/ ; //这时n的个数在1~无穷大之间,而在贪婪匹配的作用下,取值个数会尽可能变大;

reg = /n(1,)?/ ; //在n(1,)后加入?,这时正则匹配,取值会以最小个数为基准;

2. 正则表达式中的一些高级规则

2.1 匹配次数中的贪婪与非贪婪

在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如:"{m,n}", "{m,}", "?", "*", "+",具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配。比如,针对文本 "dxxxdxxxd",举例如下:

表达式

匹配结果
(d)(w+) "w+" 将匹配第一个 "d" 之后的所有字符 "xxxdxxxd"
(d)(w+)(d) "w+" 将匹配第一个 "d" 和最后一个 "d" 之间的所有字符 "xxxdxxx"。虽然 "w+" 也能够匹配上最后一个 "d",但是为了使整个表达式匹配成功,"w+" 可以 "让出" 它本来能够匹配的最后一个 "d"

由此可见,"w+" 在匹配的时候,总是尽可能多的匹配符合它规则的字符。虽然第二个举例中,它没有匹配最后一个 "d",但那也是为了让整个表达式能够匹配成功。同理,带 "*" 和 "{m,n}" 的表达式都是尽可能地多匹配,带 "?" 的表达式在可匹配可不匹配的时候,也是尽可能的 "要匹配"。这 种匹配原则就叫作 "贪婪" 模式 。