javascript - 使用 JS 正则表达式匹配字符串中的方括号文字时出错

标签 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*\]\[/)

为什么第一个方括号会匹配“[”,但第二个方括号会失败?

最佳答案

那里有一个零宽度字符!

"[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/

相关文章:

javascript - 如何通过对象的唯一属性值从数组中获取对象?

javascript - 从未指定的 anchor 标记获取 HREF

javascript - 无法对动态加载的元素应用 jquery 函数

javascript - 正则表达式在单词末尾的特定情况下修改字符

javascript - javascript中递归语法的正则表达式

javascript - 从对象重置 setInterval()

javascript - 使用 Handsontable 时重复标题

c# - 我需要一个正则表达式来将字符串转换为 anchor 标记以用作超链接

regex - 在 Erlang 中将 IP 地址与正则表达式匹配

regex - Linux grep - 从 x 到 y 中的文件打印数字