2012-03-20 142 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