使用正则表达式提取某些文本

时间:2016-10-14 03:47:08

标签: javascript regex

鉴于myString 6 cyl, 3.2L (3197cc) engine,需要提取以下内容:6 cyl3197cc
此代码失败,无法确定如何修复它。

const rgx = /(\d cyl).*(\d{2,4}?cc)/g;  //defined outside a loop

//inside the loop we have myString changes every run.
    let match = rgx.exec(myString);
    console.log(match[1]);   // => 6 cyl
    console.log(match[2]);   // => 97cc  <--------- suppose to be 3197cc

然后下一个循环,整个事情都不匹配说

  

“无法读取null的属性'1'。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

你没有匹配周围的括号,这导致正则表达式匹配最小匹配(贪婪与非贪婪)

将正则表达式更改为:

/(\d cyl).*\((\d{2,4}cc)\)/g

我从?删除了\d{2,4},因为根据你写的内容,听起来需要cc大小(如果你真的想要它是可选的,你可能想要cc可选以及)

然后在\((\d{2,4}cc)\)上我添加了外面的括号,并在它们之前加了反斜杠。这是与括号的字面匹配,现在允许正则表达式正常工作。

const rgx = /(\d cyl).*\((\d{2,4}cc)\)/g;  //defined outside a loop

//inside the loop we have myString changes every run.
    let match = rgx.exec('6 cyl, 3.2L (3197cc) engine');
    console.log(match[1]);   // => 6 cyl
    console.log(match[2]);   // => 97cc  <--------- suppose to be 3197cc