2016-10-05 62 views
1

我試圖找到包含特定單詞的句子。 我定義的開頭和結尾以下字符一句:. ! ?用正則表達式獲取包含特定單詞的句子

var str = "Hello, how is it going. This is the bus we have to take!"; 
var regex = /[^.?!]*(?:[.?,\s!])(bus)(?=[\s.?!,])[^.?!]*[.?!]/igm; 

var result = regex.exec(str); 


output : `This is the bus we have to take!` 

現在,我有麻煩時,我試圖找到包含單詞hello,因爲它的開始句的句子。我怎麼能改變我的正則表達式來包含這種情況?我不習慣正則表達式,即使有我的眼睛下的文檔也很難進入!

+1

如果你正在用。那麼爲什麼不分割這些字符串,然後循環檢查一個更簡單的正則表達式?如果你得到一擊,然後輸出得到命中的句子。 – markg

+0

我正在考慮這個選項,但我也想知道我是否可以在一個正則表達式中做到這一點。但我可能應該做你剛剛說的 – krakig

+0

如果你想進一步試驗,請嘗試['/[^.?!]*\bhello\b[^.?!]*/ig'](https://regex101。 com/r/yyfMa9/1),但這不是提取*句子的有效方法,您需要一個NLP包。 –

回答

1

請記住,將文本拆分爲語言句子是一項非常具體且困難的任務,通常在NLP包的幫助下執行。

如果要限制爲跟隨你的一個句子的定義特定字符串:

  • 拆分與/[.?!]/正則表達式
  • 檢查條目包含​​一個子,因爲你需要區分大小寫的檢查

var str = "Hello, how is it going. This is the bus we have to take!"; 
 
var chunks = str.split(/[.?!]/).filter(function(n) { 
 
    return /hello/i.test(n); 
 
}); 
 
console.log(chunks);

請注意,要檢查整個單詞,您可以根據其他要求使用/\bhello\b/i/(?:^|\s)hello(?!\S)/i正則表達式。

相關問題