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