2016-12-29 8 views
4

私は正規表現に関する経験はほとんどありません。インデックスが特定されたセクションの一部である正規表現で識別される文字列のセクションをどのように置き換えるのでしょうか?ここでJS文字列:正規表現のインデックスに置き換え

は私の例の文字列です:

let exampleStr = "How do I {0} the {n} with the {1} in my array?"; 

これは私のデータ配列である:今

let arr = ["replace", "items"]; 

、交換し、正規表現で、私は{#}セクションのインデックスと一致したいと思います配列要素がインデックスと一致するようにします。

結果の文字列は:それは数値が含まれていないとして

let result = "How do I replace the {n} with the items in my array?"; 

お知らせは、{N}を無視する方法。

少し難しく読み取りにいる間、私はtypeof演算などArray.indexOf、Number.isNaN、でこれを行うことができますが、正規表現は「右」とそれを行うためのクリーンな方法のようです:)

のおかげで前進。

+0

置き換えたい文字列がわかっているのであれば、なぜそれにはajaxが必要ですか? – Dekel

+1

プログラマーとして、私はジェネリックソリューションが本当に好きです。しかし、一般的な例は、把握が困難な場合もあり、読者を混乱させる可能性があります。だから、私は汎用的な解決策を探していますが、より具体的な例を挙げることがより適切であると感じています。 –

答えて

3

あなたはreplace with a callbackを使用することができます。

let exampleStr = "How do I {0} the {n} with the {1} in my array?"; 
 
let arr = ["replace", "items"]; 
 

 
let result = exampleStr.replace(/\{(\d+)\}/g, (g0, g1)=>arr[parseInt(g1,10)]); 
 
console.log(result);

パターンがシンプルである - それは、コールバック関数の構文解析を中括弧内の番号と一致し、グループ番号1
に番号をキャプチャ番号(厳密には必要ではないが、arr["1"]はきれいではありません)を入力し、配列から適切な要素を返します。
コールバックでさらにエラーチェックが使用される可能性があります。

+0

@torazaburo - あなたは正しいですが、それはスタイルの選択です。 '{'と '}'はメタキャラクタであり、通常はそれらをエスケープしたい。これは数字の文脈で、ここでさらに正当化されます。 '{\ d +}'は、例えばテストや修正されたコードでは '{2} 'になり、構文エラーになります。 – Kobi

関連する問題