2016-08-17 80 views
1

使用情況正則表達式:解析一句

準備一個正則表達式可以匹配後1或2個字「賣|出售|銷售」和可變「產品」

匹配
Sentence - "John wants to sell 200$ XYZ laptop and buy ABC PC" 

if product = "ABC" , then it should not match 

If product = "XYZ" , then it should match 

我所做(JavaScript)的

var desc = "John wants to sell 200$ XYZ laptop and buy ABC PC" 
var product = "ABC" 

var reg_s="sell\|selling\|sold (.*)" + product; 
var re_s= new RegExp(reg_s,'gi'); 
var sell = desc.match(re_s); 

在上面的代碼中,「賣出」後,整個字符串是越來越一致 - 但它應該 不匹配ABC。只需要匹配那些出現的產品1,2詞 後賣|賣。例如:產品= XYZ應該匹配

我是新來的正則表達式和學習相同。需要你的建議。

回答

2

您在正則表達式中的(.*)段確實會匹配字符串的其餘部分,因爲.基本上表示任何字符。如果你只是想獲得未來兩「字」,你需要的東西,如限制捕獲:

(\S+)\s*(\S*) 

這將會給你以下兩個捕獲組,一組爲每個(最多)兩個詞固定的字符串。


進一步上,我建議使用以下爲基準:

var desc = "John wants to sell 200$ XYZ laptop and buy ABC PC"; 
var product = "ABC"; 

var reg_s="(sell|sold|selling)\\s+(\\S*\\s*\\S*)"; 
var re_s= new RegExp(reg_s,'gi'); 
var sell = re_s.exec(desc); 
alert(sell[2]); 

這使您拍攝組的實際陣列而由string.match給你的陣列將是一個數組沒有單獨捕獲組的字符串分裂。

+0

非常感謝你..我會學習更多,並嘗試調整其他正則表達式..謝謝:) – Debaditya