0

JavaScriptを使用して、他の2つの文字列の中にあるテキストを、それらの文字列を含めずに特定しようとしています。例えば:

入力:ONE example TWO

正規表現:(?=ONE).+(?=TWO)

一致:ONE example

が欲しいです:example

疑問符(クエリにその文字列が含まれているだけで、結果は含まれていないはずです)が文字列の最後に機能しますが、最初には機能しないことに本当に驚いています。

4

2 に答える 2

1

あはは!私はそれを考え出した。

たとえば、括弧なしで括弧内にテキストを取得する方法は次のとおりです。

(?<=\().+(?=\))

ここに素晴らしいリファレンスがあります:http://www.regular-expressions.info/lookaround.html

私の混乱の一部は、javascriptのせいでした。明らかに「ルックビハインド」をネイティブにサポートしていません。私はこの回避策を見つけました:http: //blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

于 2012-05-29T17:35:27.797 に答える
0

(私は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 '
于 2012-05-29T17:30:07.803 に答える