正则表达式:解析一句话

时间:2016-08-17 02:02:29

标签: javascript regex expression

用例

准备一个可以匹配1到2个单词的正则表达式' sell | sold | sell'并匹配变量" product"

示例

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);
  

在上面的代码中,' sell'之后的整个字符串。正在匹配 - 但它应该   不符合ABC。只需匹配那些出现1,2个字的产品   售后|卖|卖。例如:product = XYZ应匹配

我是正则表达式的新手并且学习相同的东西。需要你的建议。

1 个答案:

答案 0 :(得分: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给您的数组将是一个字符串数组,而不会拆分各个捕获组。