2012-03-20 140 views
0

我在使用Javascript中的正则表达式匹配字符串中的方括号时出现问题。我已经测试了下面的正则表达式,和它的作品对我来说:在JS正则表达式中匹配方括号字符串的错误

"step_users[0]​[step]​[name]​".match(/step_users\[\d*\]/) 

此正则表达式匹配的子串“step_users [0]”,但我真正需要匹配的子串“step_users [0] [步骤] ”。我试图修改如下的正则表达式,但它失败了。

/step_users\[\d*\]\[step\]/ 

事实上,如果我甚至添加第二个'[',它就会失败。所以,这也是失败的:

"step_users[0]​[step]​[name]​".match(/step_users\[\d*\]\[/) 

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

+0

试试给我们一个**非工作** jsFiddle。 – gdoron 2012-03-20 07:47:46

回答

2

你有一个零宽度的字符在那里!

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

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

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

我怎么觉得这很简单。你的正则表达式应该已经工作了。所以,我看着它停止工作。找到这些零宽度空格的简单技巧是沿着字符串移动箭头。

编辑:第二提交后,我想的一个简单的方法将其删除:

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

这就产生了一个正则表达式,全局搜索所述特定ZWS字符,然后替换为每次出现空字符串。

+0

优秀发现。 – Kaii 2012-03-20 07:52:17

+0

那么......那我们去吧。谢谢。我想这是因为我把它从Web检查器控制台的html name属性输出中复制出来。 – slave2zeros 2012-03-20 07:53:58

+0

@ slave2zeros享受。我只是通过简单的方式编辑删除该bug。 – Zirak 2012-03-20 07:55:19