2012-03-20 2 views
0

文字列中の角括弧をJavascriptの正規表現と一致させる際に問題があります。 [0] [ステップ]をJS正規表現の文字列で角括弧リテラルを一致させる際にエラーが発生しました

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

この正規表現は、サブストリング一致した「step_usersを[0]」が、私が本当に一致させる必要があることは、サブストリング「step_usersです:私は、以下の正規表現をテストしている、そしてそれは私の作品"私は次のように正規表現を修正しようとしましたが、それは私のために失敗します。

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

実際、2番目の '['に追加しても失敗します。したがって、これも失敗します:

なぜ最初の角括弧は '['と一致しますが、2番目の角括弧は失敗しますか?

+0

私たちに**動作していない** jsFiddleを試してみてください。 – gdoron

答えて

2

あなたはそこにゼロ幅の文字を持っています!

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

8203は、ゼロ幅の空白文字です。実際、あなたはそれをすべての括弧のペアの間に持っています!

データをフェッチするときに手動または動的に削除します。

どのように私はそれが簡単だったことがわかりました。あなたの正規表現は働いていたはずです。だから、私はそれが動作を停止した場所を見た。これらの幅のないスペースを見つける簡単なやり方は、文字列に沿ってShift + Arrowを押すことです。

編集:提出後の第二、私はそれを削除する簡単な方法を考えた:

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

これは世界的に、特定のZWS文字を検索する正規表現を作成し、その後で各発生を置き換えます空の文字列。

+0

優れた発見。 – Kaii

+0

さて、そこに行くわ。ありがとう。 Webインスペクタのコンソールにあるhtml name属性の出力からコピーしたためです。 – slave2zeros

+0

@ slave2zerosお楽しみください。私はそのバグを削除する簡単な方法で編集しました。 – Zirak

関連する問題