我在将字符串中的方括号与 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][".length === 5
"[0][".charCodeAt(3) === 8203
8203是字边界字符,零宽度空格字符。事实上,每对牙套之间都有它!
在获取数据时手动或动态删除它。
我发现它的方法很简单。你的正则表达式应该有效。所以,我查看了它停止工作的地方。找到这些零宽度空格的一个简单技巧是沿着字符串按住 Shift-箭头。
编辑:提交后一秒钟,我想到了一个简单的方法来删除它:
var destroyZWS = new RegExp(String.fromCharCode(8203), "g");
yourString.replace(destroyZWS, "");
这将创建一个正则表达式,它全局搜索特定的 ZWS 字符,然后用空字符串替换每个匹配项。
关于javascript - 使用 JS 正则表达式匹配字符串中的方括号文字时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9782759/