簡體   English   中英

javascript 正則表達式查找特定句子

[英]javascript regexp find particular sentence

可能是一個簡單的問題,但我對正則表達式還很陌生。

給定一個段落,我想找到一個以指定單詞開頭的特定句子,並將整個句子替換為其他內容。

我如何構建一個正則表達式來搜索以特定單詞開頭的句子,該單詞后面可以跟許多不同的單詞,並以. (時期)。

例如,給定句子foo bar. foo3 bar3. foo2 bar2. foo bar. foo3 bar3. foo2 bar2. , 找到一個以foo3開頭,有任意數量的單詞,以 結尾的 substring . .

像這樣:

/(^|\.\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合並額外的匹配字符(上一句中的句點),然后是要替換舊句子的新句子。 這樣就保證了該段其他句子的state不變。 另請注意,此示例將更新所有匹配的句子,因為我使用了/g (全局)標志。 如果您只想更改第一句,請刪除g ,或者通過包含更多開頭詞來使您的句子匹配更具體。

演示: http://jsfiddle.net/qPxFp/2/

我能想到的最短/最有效的:

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

但是,這有一些問題:

  • 它將匹配一個十進制數(比如匹配foo3 contributed $4. foo3 contributed $4.83 million to the campaign.
  • 它會在技術上匹配句子中任何地方的 foo3 到句子的結尾(就像匹配foo3's guts.I hate foo3's guts.
  • 例如,它不允許以感嘆號或問號結尾的句子

下面的表達式解決了這些問題——盡管它的效率有點低(通過在標點符號后要求某種空格或字符串結尾):

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

...替換為 eg: $1Replacement sentence.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM