JavaScriptを使用して、他の2つの文字列の中にあるテキストを、それらの文字列を含めずに特定しようとしています。例えば:
入力:ONE example TWO
正規表現:(?=ONE).+(?=TWO)
一致:ONE example
が欲しいです:example
疑問符(クエリにその文字列が含まれているだけで、結果は含まれていないはずです)が文字列の最後に機能しますが、最初には機能しないことに本当に驚いています。
JavaScriptを使用して、他の2つの文字列の中にあるテキストを、それらの文字列を含めずに特定しようとしています。例えば:
入力:ONE example TWO
正規表現:(?=ONE).+(?=TWO)
一致:ONE example
が欲しいです:example
疑問符(クエリにその文字列が含まれているだけで、結果は含まれていないはずです)が文字列の最後に機能しますが、最初には機能しないことに本当に驚いています。
あはは!私はそれを考え出した。
たとえば、括弧なしで括弧内にテキストを取得する方法は次のとおりです。
(?<=\().+(?=\))
ここに素晴らしいリファレンスがあります:http://www.regular-expressions.info/lookaround.html
私の混乱の一部は、javascriptのせいでした。明らかに「ルックビハインド」をネイティブにサポートしていません。私はこの回避策を見つけました:http: //blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
(私はPythonのre
モジュールを使用して例を示しています。これを行う方法は、正規表現の実装によって異なります[たとえば、グループを持たないものもあります-または後方参照])
最初のアサーションには、順方向アサーションではなく、逆方向アサーションを使用します。
>>> re.search(r"(?<=ONE).+(?=TWO)", "ONE x a b TWO").group()
' x a b '
問題は、ゼロ幅アサーション(?=ONE)
がテキスト「ONE」と一致するが、それを「消費」しないことです。つまり、そこにあることを確認するだけで、文字列はそのままにします。次に、.+
テキストの読み取りを開始し、それを消費します。
後方アサーションは先を見ず、後ろを見るので、後ろにあるものが「ONE」に.+
なるまで実行されません。
これらをまったく気にせず、グループを使用する方がおそらく良いでしょう。検討:
>>> re.search(r"ONE(.+)TWO", "ONE x a b TWO").group(1)
' x a b '