我在javascript中看到了这个奇怪的正则表达式.
string = "abababababababa"; string=string.replace(/ ?a ?/g,"X"); alert(string);
我跑了,我得到的输出全部被X取代.令人费解的是正则表达式中的白色空格.我删除了第一个空格,脚本将无法运行.我删除了第二个空白区域,我将一个"a"替换为两个"X".我想知道它是如何工作的.
该空间实际上意味着匹配空格字符(U + 0020).
关键是跟随每个模型的?
量词,允许模式为每个模式匹配" 0或1个空格 ",从而使它们成为可选项.
因此,该/ ?a ?/
模式能够匹配:
"a"
"a "
" a"
" a "
并且,尝试删除任一空格将改变模式的含义:
删除前导空格(/?a ?/g
)实际上会导致SyntaxError
量词需要在量化之前进行量化.
删除尾随空格(/ ?a?/g
)在语法上是有效的,但?
量词将适用于a
,将可能的匹配更改为:
""
"a"
" "
" a"