V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
yuanfnadi
V2EX  ›  JavaScript

javascript 正则表达式的疑问

  •  
  •   yuanfnadi · 2018-05-02 11:29:28 +08:00 · 2827 次点击
    这是一个创建于 2404 天前的主题,其中的信息可能已经有所发展或是发生改变。
    为何执行的返回结果不同


    ```
    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>')

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

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

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

    这使得构造函数和字面量的行为不一致
    所以,除非真的需要动态构造正则
    应该统一用字面量形式定义
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2824 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 03:55 · PVG 11:55 · LAX 19:55 · JFK 22:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.