手动解析这个正则表达式的步骤/([.*+?^=!:${}()|\]\\))/ g

时间:2013-12-24 04:02:40

标签: javascript regex

/([.*+?^=!:${}()|\[\]\/\\])/g
  1. / /g
  2. ( )
  3. [ ]
  4. 左:.*+?^=!:${}()

    右:\[\]\/\\

  5. 或运营商的右侧:

    \[匹配[

    \]匹配]

    \/匹配/

    \\匹配\

  6. 我的第4步是否正确? 第4步剩下的部分是什么

    .*+?^=!:${}() 
    

    在方括号旁边匹配?

    因为第3步是[],所以它只匹配一个字符。它是否正确?

    从这里复制正则表达式:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FRegular_Expressions

2 个答案:

答案 0 :(得分:4)

第4步没有左或右部分

[.*+?^=!:${}()|\[\]\/\\]

定义一个由以下内容组成的字符集:

  • 一个点字符
  • 星号
  • 加号
  • 一个问号
  • ...
  • 正斜杠(逃脱)
  • 反斜杠(逃脱)

因此,整个表达式的这一部分将匹配在方括号[ ... ]

中枚举的字符

答案 1 :(得分:2)

@zerkms有一个很好的答案。我只是想提供一个替代方案 - 指向真正有用的网站regex101.com。在那里你可以输入你的表达,你会得到一个很好的解释,如何解释它;你也可以输入字符串,看看匹配的是什么。放入上面的表达式(参见http://regex101.com/r/iG3lA0)确认最外面括号内的所有内容都被视为单个字符类,具有[]/\的转义值;整个表达式可以解释为

  

"匹配任何位置的任何字符.*+?^=!:${}()|[]/\   string,并将这些字符作为单独的匹配返回"。

有关[]字符类构造中特殊字符的规则有点奇怪 - 例如参见http://www.regular-expressions.info/charclass.html。并且/g标志意味着这匹配字符串中匹配的任何位置(而不是仅仅一次)。这就是你问题最后一部分的答案:

"虽然方括号内的表达式一次只匹配一个字符,但/g标志表示匹配在任何地方执行,并且每个匹配的字符作为单独的匹配返回"。