javascript正则表达式中奇怪的空格

Flm*_*dfj 4 javascript regex whitespace

我在javascript中看到了这个奇怪的正则表达式.

string = "abababababababa";
string=string.replace(/ ?a ?/g,"X");
alert(string);  
Run Code Online (Sandbox Code Playgroud)

我跑了,我得到的输出全部被X取代.令人费解的是正则表达式中的白色空格.我删除了第一个空格,脚本将无法运行.我删除了第二个空白区域,我将一个"a"替换为两个"X".我想知道它是如何工作的.

Jon*_*ski 9

该空间实际上意味着匹配空格字符(U + 0020).

关键是跟随每个模型的?量词,允许模式为每个模式匹配" 0或1个空格 ",从而使它们成为可选项.

因此,该/ ?a ?/模式能够匹配:

  • "a"
  • "a "
  • " a"
  • " a "

并且,尝试删除任一空格将改变模式的含义:

  • 删除前导空格(/?a ?/g)实际上会导致SyntaxError量词需要在量化之前进行量化.

  • 删除尾随空格(/ ?a?/g)在语法上是有效的,但?量词将适用于a,将可能的匹配更改为:

    • ""
    • "a"
    • " "
    • " a"

  • 而且,至关重要的是,空间及其量词是正则表达式中的一个"原子",所以不应该分成两半.删除第一个空格会留下一个"?"量词,无需量化(因此脚本失败); 删除第二个空格会在`a`上附加一个```量词,使得"可能是一个空格,然后可能是一个'a`的奇怪模式. (2认同)