3

为什么 /pattern/ 匹配,但 RegExp 不匹配?

<div id="foo">
##content##
<h1>works!</h1>
##/content##
</div>

<script>
var str = document.getElementById("foo").innerHTML;
console.log(str);

var r = new RegExp("##content##([\S\s]*)##\/content##", "img");

console.log(r.exec(str)); //null
console.log(str.match(/##content##([\S\s]*)##\/content##/img)); //matches
</script>
4

1 回答 1

6

问题是这一行:

var r = new RegExp("##content##([\S\s]*?)##\/content##", "img");

它应该替换为:

var r = new RegExp("##content##([\\S\\s]*?)##\/content##", "img");

原因:了解 RegExp 对象将 String 作为构造参数,您需要双重转义\S并被\sRegEx 引擎正确解释,因此\S应该成为\\S并且 \s 应该成为\\s您的正则表达式。

于 2013-04-26T15:06:29.127 回答