问题描述
JS中当在正则表达式中写HTML标签时,浏览器可能会错误的将正则表达式中的HTML标签当成HTML标签解析,而不是正则表达式,例如,对于如下JS代码:1
2
3
4
5
6<script>
...
</script>\n/m;
text=text.replace(regexs,toc);
...
</script>
浏览器可能会解析成:1
2
3<script>
...
</script>
这就会运行错误:
解决方案
使用字符组[]
,将html标签的反斜线
,或者尖括号<>
包裹起来,也就是将改如下形式:1
2
3
4
5
6<script>
...
text=text.replace(regexs,toc);
...
</script>
这样<[/]script>
依然匹配</script>
,浏览器也不会解析错误.
更新
其实是因为我通过/pattern/
这种方式来创建正则,而HTML中带有反斜线/
,将反斜线写成:\/
即可,也就是如下所示:1
2
3
4
5
6<script>
...
var regexs=/<div id='my_toc'>\n\n(.+\n)+\n<\/div>\n<script>.+<\/script>\n/m;
text=text.replace(regexs,toc);
...
</script>
不过还是使用上面的那种方式比较严格,这种方式<script>
可能依旧被解析成html
标签.