2 つの単語の間からテキストのチャンクを取得する必要がある出力解析を行っています。たとえば、テキストを解析している場合
"Hi this is an example"
私の2つの単語が「こんにちは」と「例」であることを指定できるようにしたいのですが、文字列が返されます
" this is an "
正規表現が便利であることは知っていますが、慣れていません。何か案は?
次のような正規表現が必要になります
Hi(.*?)example
すべてを()
sでキャプチャしたい
.
任意の文字に一致
*
0から無限大まで欲しいという意味.
最後に a を追加し?
て、貪欲に一致しないようにします。そうしないと、「こんにちは」の後の最初の「例」ではなく、テキストの最後の「例」まですべてが飲み込まれてしまいます。
編集:正規表現テスターに関する限り、私はRubularが好きです。技術的にはルビー固有ですが、単純なことには問題なく機能します。正規表現の一致全体とキャプチャ グループが表示されます。これがあなたの例です:http://rubular.com/r/c9I4cmJqBx
この正規表現は、2 つの単語の間のすべてに一致します。
(?<=Hi).*(?=example)
この正規表現は「ルックアラウンド」を採用しているため、グループをキャプチャしてから抽出する必要がなくなります。一致全体がターゲットになります。
このタスクには正規表現は必要ありません。両方の単語のインデックスを見つけて、2 つのインデックスの間にあるものを返します。最初の単語の長さを最初のインデックスに追加する必要があります。
var search = 'this is a quick test', first = 'this', second = 'test';
search.substring( search.indexOf(first) + first.length, search.indexOf(second));