Javascript新的RegExp vs. / pattern /和多行

时间:2013-04-26 14:59:39

标签: javascript regex

为什么/ 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>

1 个答案:

答案 0 :(得分:6)

问题在于这一行:

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

应替换为:

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

原因:了解RegExp对象将String作为构造的参数,您需要双重转义\S\s才能被RegEx引擎正确解释所以{{ 1}}应该成为\S,而\ s应该在你的正则表达式中成为\\S