我遇到了将字符串中的方括号与Javascript中的正则表达式匹配的问题。我已经测试了下面的正则表达式,它适用于我:
"step_users[0][step][name]".match(/step_users\[\d*\]/)
这个正则表达式匹配子串“step_users [0]”,但我真正需要匹配的是子串“step_users [0] [step]”。我尝试修改正则表达式如下,但它失败了。
/step_users\[\d*\]\[step\]/
事实上,如果我加上第二个'[',它就失败了。所以,这也失败了:
"step_users[0][step][name]".match(/step_users\[\d*\]\[/)
为什么第一个方括号的'['匹配,但第二个方括号失败?
答案 0 :(得分:2)
你那里有一个零宽字符!
"[0][".length === 5
"[0][".charCodeAt(3) === 8203
8203是单词边界字符,零宽度空格字符。事实上,你在每对大括号之间都有它!
在您获取数据时手动或动态删除它。
我怎么觉得这很简单。你的正则表达式应该有效。所以,我看了它停止工作的地方。找到这些零宽度空间的一个简单技巧是沿着字符串移位箭头。
编辑:提交后的第二个,我想到了一个简单的方法来删除它:
var destroyZWS = new RegExp(String.fromCharCode(8203), "g");
yourString.replace(destroyZWS, "");
这会创建一个正则表达式,它会全局搜索特定的ZWS字符,然后用空字符串替换每个匹配项。