コンストラクターを使用する場合、エスケープには 2 つのレイヤーがあるため、エスケープを 2 倍RegExp
にする必要があります。JavaScript 文字列リテラルでのエスケープと、正規表現構文でのエスケープです。
ただし、あなたの場合、まったくエスケープせずに正規表現を書くことは可能です。
あなたの場合、リテラルRegExp
/
を使用するだけでよく、正規表現構文でのエスケープと、正規表現に現れるものをエスケープすることだけを気にする必要があります(/
リテラルの区切り文字として使用されるためRegExp
:
/^[a-z 0-9"\-`]+$/gi
別の方法は次のとおりです。
/^[a-z 0-9"`-]+$/gi
-
文字クラスの最後にある場合は、ダッシュをエスケープする必要はありません。このようにして、すべてのエスケープと混同する必要はありません。
または、引き続きコンストラクターを使用する場合は、文字列でRegExp
指定するエスケープを 2 倍にする必要があります。\
new RegExp('^[a-z 0-9"\\-`]+$', "ig")
-
または、文字クラスの最後に指定されている別のバージョンを使用するだけです。
new RegExp('^[a-z 0-9"`-]+$', "ig")
文字列でエスケープする必要がないように、文字列の引用符を から に変更していることに注意して"
ください。何らかの理由で を好む場合は、リテラル文字列レベルでエスケープします。'
"
"
"
new RegExp("^[a-z 0-9\"`-]+$", "ig")
現在の正規表現については
new RegExp("^[a-z 0-9\"\-\`]+$", "ig")
と同等です
/^[a-z 0-9"-`]+$/gi
"
からまでの文字範囲`
が含まれていることがわかります。これは、0x22 から 0x60 までの ASCII コードを持つすべての文字が含まれ、#
たまたまその範囲内にあることを意味します。
パターンが目的のものかどうかを確認するには、いつでもsource
正規表現のプロパティを呼び出して、正規表現のソース文字列を取得できます。