将字符串中的方括号文字与JS正则表达式匹配时出错

时间:2012-03-20 07:21:48

标签: javascript regex

我遇到了将字符串中的方括号与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*\]\[/)

为什么第一个方括号的'['匹配,但第二个方括号失败?

1 个答案:

答案 0 :(得分:2)

你那里有一个零宽字符!

"[0]​[".length === 5
"[0]​[".charCodeAt(3) === 8203

8203是单词边界字符,零宽度空格字符。事实上,你在每对大括号之间都有它!

在您获取数据时手动或动态删除它。

我怎么觉得这很简单。你的正则表达式应该有效。所以,我看了它停止工作的地方。找到这些零宽度空间的一个简单技巧是沿着字符串移位箭头。

编辑:提交后的第二个,我想到了一个简单的方法来删除它:

var destroyZWS = new RegExp(String.fromCharCode(8203), "g");
yourString.replace(destroyZWS, "");

这会创建一个正则表达式,它会全局搜索特定的ZWS字符,然后用空字符串替换每个匹配项。