2016-03-06 13 views
0

我想寫一個正則表達式來提取句子中的最後幾個單詞。但是,我似乎無法使其工作。使用正則表達式提取一個句子中的最後幾個單詞?

var str = "Tell me about robin hood"; 
const TELL_ME_ABOUT_REGEX = /^Tell me about (\w+\s*)*/ 
if(str.match(TELL_ME_ABOUT_REGEX)){ 
    var matches = TELL_ME_ABOUT_REGEX.exec(str); 
    console.log("user wants to know about ",matches); 
} 

我試圖得到了這個詞「羅賓漢」。但我只會以「引擎蓋」而告終。

[ 'Tell me about robin hood', 
    'hood', 
    index: 0, 
    input: 'Tell me about robin hood' ] 

我在正則表達式中改變了什麼?

+0

試試這個'告訴我有關([\ w \ s] +)' –

回答

2

這是一個正確的正則表達式:

^Tell me about ((?:\w+\s*)*) 

比較,以你原來這是

^Tell me about (\w+\s*)* 

這是關閉的。關鍵是你應該使用非捕獲組作爲內部括號,併爲外部括號捕獲組。

注意(\w+\s*)*從您正則表達式,它可能會在第一時間捕捉到robin\1然後覆蓋hood\1。所以,現在你可能會明白正則表達式引擎會以這種方式工作。

+0

ahhh這就是我正在尋找..謝謝一噸 –

3

爲什麼你需要這樣的正則表達式?你可以不用正則表達式像它

var str = "Tell me about robin hood"; 
var str = str.split(" ").splice(3).join(" "); 
alert(str); 

http://codepen.io/anon/pen/aNvrYz

編輯:正則表達式的解決方案

var str = "Tell me about robin hood"; 

var match = str.match(/^Tell me about (.*)/i); 
var textInDe = match[1]; 
alert(textInDe); 

http://codepen.io/anon/pen/BKoerY

+0

哈哈!!是啊!就是這樣!但我正在學習正則表達式,所以... :) –

+0

其總是很好學習...我已經爲你添加正則表達式解決方案 – Praveen

1

試試這個

Tell me about ([\w\s]+) 

Regex Demo

(\w+\s*)*將捕獲「羅賓」然後「罩」,但只保留最後一次迭代=>「罩」

+0

爲什麼它只保留最後一次迭代? :) –

+0

http://stackoverflow.com/questions/35677905/difference-between-two-regular-expressions-abc-and-abc/35677940#35677940 –

+0

重複的捕獲組將只捕獲最後一次迭代。如果你對數據不感興趣,可以在重複組中放置一個捕獲組來捕獲所有迭代或使用非捕獲組。所以'((\ w + \ s *)*)'也會捕獲'羅賓漢'。 –

2

/^Tell me about (\w+\s*)*/的問題是,是倍數爲"Tell me about robin hood"匹配,即robin是可能的匹配,以及robin\s等等。重複角色可能會讓你有時感到困惑,但是當你想到所有匹配的可能性時,它可以更清晰。 要匹配Tell me about之後的所有內容,您只需一次即可完成,只有一個可能的匹配項:(.*)

Regex demo

相關問題