私がしたいのは、2つ以上の文字が最初に出現したものと一致するので、例えばAとFを以下の文字列からハイライトしたいとします:文字列内の各文字の最初の一致を一致させる
"ASDFASDFASDFASDF"
しかし、唯一の最初A
とだけ最初F
私が試した:
/A{1}F{1}/i
しかし、喜び...
感謝任意のアイデア...
私がしたいのは、2つ以上の文字が最初に出現したものと一致するので、例えばAとFを以下の文字列からハイライトしたいとします:文字列内の各文字の最初の一致を一致させる
"ASDFASDFASDFASDF"
しかし、唯一の最初A
とだけ最初F
私が試した:
/A{1}F{1}/i
しかし、喜び...
感謝任意のアイデア...
indexOfのような簡単なアプローチがあります。
考え方と同じように、正規表現を使用して最初の出現箇所を検索するのではなく、文字列を逆順にして、最後に出現箇所を見つけるには、negative lookaheadを使用します。
次にreplaceを正規表現で置き換えて、<span>
のようなラッパーを追加してから、文字列を再度反転します。
例は、最後に出現のための正規表現:
var str1 = "ASDFASDFASDFASDF";
str1 = str1
.split("").reverse().join("")
.replace(/([A|F])(?!.*\1)/gim, '>naps/<$1>naps<')
.split("").reverse().join("");
document.write(str1);
document.write("<br>");
var str2 = "I am on a shark fishing trip, a fishing trip for shark I am on.";
str2 = str2
.split(" ").reverse().join(" ")
.replace(/(shark|trip)(?!.*\1)/gim, '<span>$1</span>')
.split(" ").reverse().join(" ");
document.write(str2);
span {
color: red;
}
これは、あなたがしたい試合を与える必要があります:
/^(a).*?(f)/i
目的は何ですか?また、なぜ '.indexOf()'のような単純なものを使うことができないのですか? – Tomalak
私は 'indexOf'について同意します。他の方法がない場合は、最初に 'A'を検索するときに'^[^ A] *(A) 'を試すことができます(javascript RegExpを使って可変長のlookbehindがないので)。グループをキャプチャすると、文字列中の出現位置を知ることができます。 – PJProudhon
文字列に** AとFの**の位置で何かしたいのでない限り、単純に 'includes'または' indexOf'が行います。 – gurvinder372