默认情况下,正则表达式使用最长匹配原则,即贪婪匹配原则。
例如,要将 "book" 中匹配 "bo?" 的部分替换成 " l " ,替换后的结果是 "lok" ,而不是 "look" ;要将 "book" 中匹配 "bo*" 的部分替换成 " l " ,替换后的结果是 "lk" ,而不是 "lok" 或 "look" 。
当解释器将代码中的字符解析成一个个编译器,并在处理代码当前最小语法单元时,编译器会使用一种贪婪匹配算法,也就是说,会尽可能让一个单元包含更多的字符。当字符 " ? " 紧跟任何其它限定符( * 、 + 、 ? 、 {n} 、 {n,} 、 {n,m} )之后时,匹配模式变成使用最短匹配原则,即非贪婪匹配原则。例如,在字符串 "booook" 中, "bo+?" 只匹配 "bo" 部分,而 "bo+" 匹配 "boooo" 部分。
选择匹配符 |
,用于选择匹配两个选项之中的任意一个,其两个选项是 |
字符两边尽可能最大的表达式。
威力避免歧义,尽量为选择操作的多个子匹配符添加小括号。
var s1 = 'abc';
var s2 = 'efg';
var s3 = '123';
var s4 = '456';
var r = /(abc)|(efg)|(123)|(456)/; // 选择多重匹配
var b1 = r.test(a1); // true
var b2 = r.test(a2); // true
var b3 = r.test(a3); // true;
var b4 = r.test(a4); // true
针对表单中的敏感词过滤,可以设置敏感词列表进行替换。
var s = "a'b?c&"; // 待过滤的表单提交信息
var r = /\'|\"|\?|\&/gi; // 过滤敏感字符的正则表达式
function f() {
// 替换函数,把敏感字符转换为对应的网页的编码格式
return '&#' + arguments[0].charCodeAt(0) + '';
}
var a = s.replace(r, f); // 执行过滤替换
console.log(a); // 在网页显示正常的字符信息
alert(a); // 返回字符串 "a'b?c&"