正则表达式匹配其边界

时间:2015-06-11 13:59:17

标签: javascript regex

我正在尝试使用正则表达式的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>

1 个答案:

答案 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