2012-04-09 15 views
1

は簡単な質問かもしれませんが、私は正規表現をかなり新しくしています。javascript regexp特定の文章を見つける

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

どのように特定の単語で始まり、さまざまな単語が続き、末尾に.(ピリオド)で終わる文を検索する正規表現を構築できますか?例えば、foo bar. foo3 bar3. foo2 bar2.の文では、foo3で始まり、任意の数の単語を持ち、.で終わる部分文字列を見つけます。このような

+0

文章が他の句読点( '!'や '?'など)で終わるとどうなりますか?文に小数または通貨が含まれていますか? –

答えて

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); 

、私は正規表現を使用して、余分なマッチした文字を置換して組み込む(期間前の文から)$1を介して、その後に古い文を置き換える新しい文が続く。これにより、段落内の他のセンテンスの状態は変わらないことが保証される。 /g(グローバル)フラグを使用するので、この例ではすべての一致する文が更新されることにも注意してください。最初の文のみを変更する場合は、gを削除するか、より多くの開始語を含めることで、より具体的な文章にします。

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

+1

これは段落の最初の文であれば動作しません。 –

+0

@KarlBielefeldt:良い点が更新されました。 – mellamokb

+0

ありがとうmellamokb!私は正規表現を少し変更し、文章だけをつかむことができました。 '/(foo3 \ s [^。] * \。)'とそれは素晴らしいサイトです。リンクをありがとう。 – bigbaeng

0

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

  • それは10進数に一致します:いくつかの問題を抱えていること、しかし

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

    (一致のようなfoo3 contributed $4.からfoo3 contributed $4.83 million to the campaign.

  • それは技術的にfoo3に文のどこにでもマッチする文の終わりは
  • I hate foo3's guts.foo3's guts.に一致するように)それは

次の式はこれらの事を修正たとえば、感嘆符や疑問符で終わる文章のために許可されません - それは少し非効率的だけれども(句読点の後に何らかの種類の空白または文字列の最後を要求することによって):

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

...:$1Replacement sentence.

関連する問題