可能是一個簡單的問題,但我對正則表達式相當陌生。javascript正則表達式找到特定句子
給出了一個段落,我想找到一個特定的句子,以指定的單詞開始,並用其他的替換整個句子。
如何構建正則表達式來搜索以特定單詞開頭的句子,後面可以跟多個不同單詞並以.
(句點)結尾。
例如,給定句子foo bar. foo3 bar3. foo2 bar2.
,找到以foo3
開頭的子字符串,具有任意數量的詞並以.
結尾。
可能是一個簡單的問題,但我對正則表達式相當陌生。javascript正則表達式找到特定句子
給出了一個段落,我想找到一個特定的句子,以指定的單詞開始,並用其他的替換整個句子。
如何構建正則表達式來搜索以特定單詞開頭的句子,後面可以跟多個不同單詞並以.
(句點)結尾。
例如,給定句子foo bar. foo3 bar3. foo2 bar2.
,找到以foo3
開頭的子字符串,具有任意數量的詞並以.
結尾。
事情是這樣的:
/(^|\.\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
,或者通過添加更多的開始單詞使您的句子更加具體。
最短/最有效的,我能想到的:
/foo3\b[^.]*\./
然而,有幾個問題:
foo3 contributed $4.
from foo3 contributed $4.83 million to the campaign.
I hate foo3's guts.
foo3's guts.
)下面的表達式修復這些事情 - 儘管這是一個有點低效率(通過在標點符號之後要求某種空白或字符串尾部):
/(^|[.!?]\s+)foo3\b.*?(?=[.!?](\s|$))[.!?]/
...用例如:$1Replacement sentence.
如果句子以其他標點符號結尾(如'!'或'?')會怎麼樣?該句子是否可以包含十進制數或貨幣? – 2012-04-09 16:15:57