我正在尝试使用正则表达式的body标签,然后替换为附加到它的东西。问题是,通过使用以下正则表达式,它失败了,因为它选择了通过我的正则表达式应该保留的限制的所有内容。
正则表达式:/<body.*[^>]>/i
测试字符串:<bla bla ><body class='a b ... what ever..d'><fo bar>
目标:<body class='a b ... what ever..d'>
示例:http://jsfiddle.net/bogdanm/qbccq79z/
问题:
它不是匹配<body class='a b ... d'>
,而是选择<body class='a b ... what ever..d'><fo bar>
答案 0 :(得分:4)
*
是一个贪婪的量词,适用于否定的类。您遇到的问题是使用带有.
的量词,使正则表达式引擎匹配(&#34;读取&#34;)直到最后寻找>
以外的字符,然后>
。正则表达式引擎在最终r>
找到此组合。所以,你得到了错误的匹配。
您需要将*
量词设置为[^>]
否定字符类,并删除匹配所有内容的.*
:
var testStr= "<bla bla ><body class='a b c d'><fo bar>";
var reg = /<body[^>]*>/i;
var match = reg.exec(testStr);
if(match != null){
// we know regex matched
alert(match[0].toString() + '\n');
}
以下是updated demo