[英]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
,或者通過包含更多開頭詞來使您的句子匹配更具體。
我能想到的最短/最有效的:
/foo3\b[^.]*\./
但是,這有一些問題:
foo3 contributed $4.
foo3 contributed $4.83 million to the campaign.
foo3's guts.
在I hate foo3's guts.
)下面的表達式解決了這些問題——盡管它的效率有點低(通過在標點符號后要求某種空格或字符串結尾):
/(^|[.!?]\s+)foo3\b.*?(?=[.!?](\s|$))[.!?]/
...替換為 eg: $1Replacement sentence.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.