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

Error matching square bracket literal in string with JS regex

本文关键字:正则表达式 出错 JS 字符串 方括号 文字      更新时间:2023-09-26

我在用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是字边界字符,一个零宽度的空格字符。事实上,你把它夹在每一副牙套之间!

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

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

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

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

这将创建一个正则表达式,该表达式全局搜索特定的ZWS字符,然后用空字符串替换每个出现的字符。