2017-11-30 8 views
0

は、私は私がやりたいことは試合javascriptの正規表現で角括弧で文字列の終わりを使用するには? JSの正規表現で

その後、リテラルドット、またはリテラルクエスチョンマークや説明マーク

1空白文字かのどちらかである

[\.\?!][\s$] 

を持っています、文字列の最後にある。

しかし、上記の正規表現は、リテラル$と一致しようとします。

誰でもこれを解決する方法を知っていますか?

おかげ

+1

['[??!](?:\ s | $)'](https://regex101.com/r/hfulTs/1)?あなたの正規表現では、 '[] 'の中に' $ 'を入れたので、それは文字通り一致します – Gurman

+0

OPは' []'の中で '.'または'? 'をエスケープする必要はないことに注意してください:p –

答えて

0

は、この正規表現を試してみてください:

[.?!](?:\s|$)

Click for Demo

説明:

  • [.?!] - 試合のいずれか.または?または!文字通り
  • (?:\s|$) - 試合のいずれか空白または行末
0

まず第一に、あなたは彼らcharacter class.?をエスケープする必要はありません。彼らの特別な正規表現の意味を失う。次に、$は、ゼロ幅アサーションであり、文字クラス内では「文字列/行末」の特別な意味を失います。

列の空白/終了前に3つの文字と一致する最も効率的な方法は、非空白文字は、現在位置のすぐ右にある場合は、任意のマッチに失敗negative lookahead(?!\S)を使用することによるものです

[.?!](?!\S) 

this regex demoを参照してください。

変更することなく、(?!\S)は次の文字を確認するために1つのステップしか必要としません。また、charはゼロ幅アサーションの一部であるため、マッチ値には追加されません。

関連する問題