1

簡単な質問かもしれませんが、私は正規表現にはかなり慣れていません。

段落を指定して、指定された単語で始まる特定の文を見つけて、文全体を別のものに置き換えたいと思います。

.特定の単語で始まり、その後にさまざまな単語が続き、 (ピリオド)で終わる文を検索するための正規表現を作成するにはどうすればよいですか。

たとえば、 という文が与えられた場合、foo bar. foo3 bar3. foo2 bar2.で始まりfoo3、任意の数の単語を含み、 で終わる部分文字列を見つけます.

4

2 に答える 2

3

このようなもの:

/(^|\.\s+)(foo3[^.]*\.)/

前の文をマークするピリオド (または最初の文の場合は文字列の先頭) を検索し、その後にスペース、開始文字シーケンス (この場合はfoo3)、その後に続くすべての非ピリオド文字を検索します。その文を終了するピリオド。

デモ: http://www.rubular.com/r/ROl2odiDn5


実際に文を置き換える方法は次のとおりです。

var str = "foo bar. foo3 bar3. foo2 bar2.";
var regex = /(^|\.\s+)(foo3[^.]*\.)/g;
str = str.replace(regex, "$1new sentence.");
alert(str);

この例では、正規表現 replace を使用して、一致した余分な文字 (前の文のピリオド) を 経由で組み込み$1、その後に古い文を置き換える新しい文を追加します。これにより、段落内の他の文の状態が変更されないことが保証されます。/g(global) フラグを使用しているため、この例では一致するすべての文が更新されることにも注意してください。最初の文だけを変更したい場合は、 を削除するgか、先頭の単語を追加して文の一致をより具体的にします。

デモ: http://jsfiddle.net/qPxFp/2/

于 2012-04-09T15:50:22.917 に答える
0

私が考えることができる最短/最も効率的:

/foo3\b[^.]*\./

ただし、これにはいくつかの問題があります。

  • 10進数まで一致します(foo3 contributed $4.からの一致のようにfoo3 contributed $4.83 million to the campaign.
  • 技術的には、文のどこでも foo3 を文の最後まで一致させます (での一致のようfoo3's guts.I hate foo3's guts.)
  • たとえば、感嘆符や疑問符で終わる文は許可されません。

次の式はこれらの問題を解決しますが、効率は少し低下します (句読点の後にある種の空白または文字列の終わりを必要とするため)。

/(^|[.!?]\s+)foo3\b.*?(?=[.!?](\s|$))[.!?]/

...次のように置き換えます。$1Replacement sentence.

于 2012-04-09T16:05:38.620 に答える