文字列が指定されています。 "{abc} Lorem ipsum {/ abc} {a} dolor {/ a}"JavaScript正規表現文字列一致/置換
中括弧 "tags"の出現を見つけて、見つかったタグとインデックスを保存して削除したい元の文字列から。インデックスごとに文字列の一部を削除しているので、この処理を繰り返していきたいと思います。最後にインデックスをすべて削除することはできません。上記の例では、何が起こるべきか、
- 文字列を検索 ...
- インデックス0
- 押すだけで検索 "{ABC}" {タグ: "{ABC}"、インデックス:0}アレイへ
- 削除「{ ABC}」という文字列から
- それ以上マッチが見つからなくなるまでステップ1を繰り返し このロジックを考える
、 『{/ ABC}』インデックス11で発見されなければならない - ので、 『{ABC}』は既にされています除去された。
私は基本的には、実際に文字列の一部としてそれらをせずにあるもので、「タグ」の開始と終了を知っておく必要があります。
ほとんど正規表現を使用していますが、時にはオカレンスをスキップします。
let BETWEEN_CURLYS = /{.*?}/g;
let text = '{abc}Lorem ipsum{/abc} {a}dolor{/a}';
let match = BETWEEN_CURLYS.exec(text);
let tags = [];
while (match !== null) {
tags.push(match);
text = text.replace(match[0], '');
match = BETWEEN_CURLYS.exec(text);
}
console.log(text); // should be; Lorem ipsum dolor
console.log(tags);
/**
* almost there...but misses '{a}'
* [ '{abc}', index: 0, input: '{abc}Lorem ipsum{/abc} {a}dolor{/a}' ]
* [ '{/abc}', index: 11, input: 'Lorem ipsum{/abc} {a}dolor{/a}' ]
* [ '{/a}', index: 20, input: 'Lorem ipsum {a}dolor{/a}' ]
*/
これは本当に良い答えです。私は同様のことに取り組んでいましたが、 '.lastIndex'がプロパティであることを認識しませんでした。 +1 – zfrisch
ああ、意味があります!本当にありがとう! –
@LewisPeel私はあなたの前の投稿で言及した置き換えの方法を考え出しましたが、 'input'部分は扱いにくいので、簡単に動作させることはできません。 –