【问题标题】:Strange javascript regular expressions奇怪的javascript正则表达式
【发布时间】:2026-02-11 19:50:01
【问题描述】:

我找到了下面的正则表达式

new RegExp("(^|\\s)hello(\\s|$)");

我参考http://www.javascriptkit.com/jsref/escapesequence.shtml 获取正则表达式.. 但是我在那里看不到 \s 转义序列..我知道 \s 表示空格字符... 但是前面的 \ 做了什么......哪个字符被转义了? 我在以下文档http://ejohn.org/blog/getelementsbyclassname-speed-comparison/的Treewalker代码中发现了类似的正则表达式

【问题讨论】:

  • \` is an escaped slash, translating to `。如果你想要空格,你应该使用\s,加上一个斜杠。

标签: javascript regex escaping


【解决方案1】:

\\ 用于转义字符串内的反斜杠。换句话说,\\ 将被解释为正则表达式的\

【讨论】:

  • ok simple \ 被视为字符串中的转义,所以我们需要两个斜杠对吗?
  • 确切地说,代码需要转义反斜杠,以便正则表达式将其视为单个反斜杠,这将使其将\s 视为空白字符。
【解决方案2】:

在这种情况下,额外的 \ 是为了转义 \s 中的 \。因为我们在一个字符串声明中,所以你必须加倍 \ 来转义它。一旦字符串被处理和保存,它就被简化为 (^|\s)hello(\s|$)

【讨论】:

    【解决方案3】:

    紧跟第一个\ 的字符被转义。通常\s 会转义s 以表示“空白”。在您的示例中,转义的字符是\

    你所拥有的是一个表达式,它构建了一个 (^|\s)hello(\s|$) 的正则表达式(可能会传递到其他地方)——单词“hello”前面是空格或字符串的开头,后面是空格或字符串的结尾.

    【讨论】:

      【解决方案4】:

      本质上,reg ex 正在做的是寻找围绕单词 hello 的文本的开始和结束项,并同时将 '\s' 解释为字符串内容。

      通俗地说,它正在寻找一个完全匹配的字符串:

      |\你好\s|

      正如其他人所说,双 \ 是为了转义单个 \,以便 reg ex 引擎不是寻找空格,而是实际上寻找 '\s' 作为字符串。

      ^ 表示行首,$ 表示行尾,2 |被解释为要查找的实际字符

      最后,您的开始和结束标记用括号括起来 (),这意味着它们将被提取并放置在匹配项中,对于使用 C# 的您来说,这意味着您可以通过以下方式获取它们:

      myRegex.Matches.Group[1].Value
      myRegex.Matches.Group[2].Value
      

      1 是开始分组,2 是结束。

      【讨论】: