繁体   English   中英

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

[英]Extract certain text using 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'。

我究竟做错了什么?

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

将你的正则表达式改为:

/(\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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM