javascript 正则表达式的疑问

2018-05-02 11:29:28 +08:00
 yuanfnadi
为何执行的返回结果不同


```
new RegExp('<script type="text\/javascript">BigPipe.onPageletArrive\((.*)\);<\/script>').exec('<script type="text\/javascript">BigPipe.onPageletArrive({"id":"123"});<\/script>')
```



```
/<script type="text\/javascript">BigPipe.onPageletArrive\((.*)\);<\/script>/.exec('<script type="text\/javascript">BigPipe.onPageletArrive({"id":"123"});<\/script>')

```
2765 次点击
所在节点    JavaScript
2 条回复
meszyouh
2018-05-02 11:58:21 +08:00
用 RegExp 构造时需要对字符串转义的
autoxbc
2018-05-02 13:21:09 +08:00
正则构造函数的字符串参数中的 \
会在构造过程中作为转义符用掉
使得最终的正则表达式没有这个 \

所以,如果需要构造一个最终包含 \ 的正则表达式
应该在构造函数中对 \ 增加一次转义

>>> new RegExp('\d')
/d/
>>> new RegExp('\\d')
/\d/

这使得构造函数和字面量的行为不一致
所以,除非真的需要动态构造正则
应该统一用字面量形式定义

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/451388

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX