私は正規表現をあまり調べていませんが、数字は[0-9]
であり、大文字は[A-Z]
.
私が知りたいのは、正規表現に一致する文字列から特定の単語を除外してスタイルを設定する方法です。例えば:
string s = 'Hello ABC1 world C2DF !';
//magic code here
//result:
'Hello <b>ABC1</b> world <b>C2DF</b> !'
私は正規表現をあまり調べていませんが、数字は[0-9]
であり、大文字は[A-Z]
.
私が知りたいのは、正規表現に一致する文字列から特定の単語を除外してスタイルを設定する方法です。例えば:
string s = 'Hello ABC1 world C2DF !';
//magic code here
//result:
'Hello <b>ABC1</b> world <b>C2DF</b> !'
これはあなたのニーズに合うはずです:
/[0-9][A-Z]{3}|[A-Z][0-9][A-Z]{2}|[A-Z]{2}[0-9][A-Z]|[A-Z]{3}[0-9]/
これは一致します (および一致のみ):
0ABC
A0BC
AB0C
ABC0
もちろん、上記のリストでは、 、A
、B
およびC
は、任意の大文字にする0
ことができ、任意の数字にすることができます。
この正規表現を使用します:
/\b(\d[A-Z]{3}|[A-Z]\d[A-Z]{2}|[A-Z]{2}\d[A-Z]|[A-Z]{3}\d)\b/
s.replace(/\b(\d[A-Z]{3}|[A-Z]\d[A-Z]{2}|[A-Z]{2}\d[A-Z]|[A-Z]{3}\d)\b/g,"<b>$&</b>");
テスト済みスクリプト:
var output,
text = "9GHJ is saying hello to ABC1 world C2DF, but 89UI is showing up with his friend HUIP, nothing to do, they are not welcome ! As garyh said, these NUMB3RZ should not be replaced",
regex = /\b(\d[A-Z]{3}|[A-Z]\d[A-Z]{2}|[A-Z]{2}\d[A-Z]|[A-Z]{3}\d)\b/g,
replace = "<b>$&</b>";
output = text.replace(regex,replace)
console.log ( output );
これを出力します:
<b>9GHJ</b> is saying hello to <b>ABC1</b> world <b>C2DF</b>, but 89UI is showing up with his friend HUIP, nothing to do, they are not welcome ! As garyh said, these NUMB3RZ should not be replaced
これを解決するには、単語の境界が必ず必要です。他の解決策は、たとえば "1ABCD" にも一致し、最初の 4 文字を強調表示します。
私の解決策にはlook aheadが含まれますが、これが必要ない場合は、単語の境界\b
を独自の解決策に合わせてください。
\b(?=[^\d]*\d[^\d]*)[A-Z\d]{4}\b
ここでRegexrを参照してください
[A-Z\d]{4}
4 文字の単語と単語の境界を一致させ、\b
前後に他の文字や数字がないことを確認します。正の先読み(?=[^\d]*\d[^\d]*)
により、正確に 1 桁という要件が確実に満たされます。