対話型フォームの構築では、ユーザーが送信した正規表現を解析し、各正規表現ですべての一致キャプチャを見つけて、それらのインデックス (キャプチャ グループが始まる場所) を取得して、元の文字列を変更する必要があります (いくつかの<strong>
タグを追加するとしましょう)。たとえば、キャプチャ)。最後に、たとえばに変更できる
ようにしたいと考えています。ip:(.+);port:(\d+)
ip:<strong>(.+)</strong>;port:<strong>(\d+)</strong>
現在、私はこの小さなコードを持っています:
// Called somewhere after user entered every regex he wants
$('input.regex').each(function () {
pattern = $(this).val(); // for non jQuery guys: just returns the content of the input
captures = pattern.match(/(\([^\(\)]+\))/g);
for(idx in captures) {
console.log(captures[idx]);
}
});
これにより、見つかったすべてのキャプチャ グループが返されます (ユーザーがサブグループを入力できないことを認めてください...ええ、正規表現はすでに少し頭痛の種になる可能性があります :-)) いくつかの例で実行すると、今のところ必要なものが得られます。
- オン
ip:(.+);port:(\d+)
、出力(.+)
および(\d+)
- オン
ip:(?P<sourceip>[\d\.]);port:(\d{2,5})
、出力(?P<sourceip>[\d\.])
および(\d{2,5})
今私が欲しかったのは、各キャプチャの開始のインデックスを取得することです。indexOf があることは知っていますが、同じキャプチャを複数回行うことができます。例えば:
id1:(\d+);id2:(\d+)
現在、 と を出力(\d+)
してい(\d+)
ます。最初のインデックスは簡単に取得できますが、2 番目のインデックスは...
これに似た構造を得る可能性はあります[{'match': '(\d+)', 'index': 4}, {'match': '(\d+)', 'index': 14}]
か? いくつかの文字列操作でこれを行うことができますが、より簡単な (そしてよりクリーンな) 方法があるかどうかを知りたいです。