0

「$」の間にあるような単語に一致する正規表現を作成しようとしています。たとえば、var myString="町に$dog$#と$rat$がありました"; 犬とネズミを合わせたいです。表現を書きました。

       var reg = /^$(.*)$/gmi 

しかし、それは、「$」が行末の特殊文字であるためではありません。どうすればそれをエスケープできますか、「\」を使用できますか?あなたは正しい表現を提案することができますか?

4

5 に答える 5

2

あなたがいくつかのコメントで述べたように、貪欲には問題があります。*可能な限り消費するので、同じように使用すると、後で別のものを見つけることができれば、.*さらに消費します。$2つの可能性があります。最も速くて最も一般的な方法は、その数量詞を単に貪欲にしないことです。

/\$(.*?)\$/g

これで、消費量は可能な限り少なくなります。ただし、推奨される方法は、繰り返しと区切り文字を相互に排他的にし、繰り返しを貪欲に保つことです。

/\$([^$]*)\$/g

バックトラックが必要ないため、これは一般的に効率的です。(私を我慢しないでください。特定の場合には、バックトラックバージョンの方が効率的かもしれませんが、これは一般的に推奨される方法です)

于 2012-11-22T09:43:19.530 に答える
1

あなたが言ったように、あなたは特殊文字をエスケープするために'\'を使うべきです。また、「^」は、照合する文字列の先頭です。以下を使用する必要があります。

/\$(.*)\$/g
于 2012-11-22T09:32:34.627 に答える
1
/\$(.*)\$/

\あなたが思ったように、あなたは脱出のために使用します。また、要件を考えると、^(文字列の開始)は有害です。

このような文字列が複数出現する場合は、貪欲さ(デフォルト)に注意する必要があるため、ターミネーターをコンテンツから許可しないようにします。

/\$([^$]*)\$/g

または、繰り返し演算子を欲張りでないものにします。

/\$(.*?)\$/g
于 2012-11-22T09:32:55.393 に答える
1

はい、エスケープは-sで行われます。マークされた個々の単語\をキャッチしたい場合は、次の正規表現を試してください。$...$

/\$([^$]+)\$/gmi // inside character classes ( the []-s) you don't need to escape it, but if you do it does the same thing
于 2012-11-22T09:34:01.650 に答える
0

使ってもいいですか "\" ??

はい。

どうして自分でやってみなかったの?

var reg = /^\$(.*)\$/gmi

一致します:

  • 文字列の開始
  • A$
  • それ以上の文字のゼロ
  • A$
于 2012-11-22T09:32:19.133 に答える