正则表达式:获取特定子字符串之前和之后的数字

时间:2019-12-09 13:42:51

标签: javascript regex

我是regex的新手,它试图在子字符串text之后和第一个非数字值之前获取数字。 我有:

const str = 'fasdfsdanvczx fdasvczx text 321,fasdgasdf'; str.toLowerCase().match(new RegExp('text (.*)[^0-9]'));

因此,我收到: ["text 321,fasdgasdf", "321,fasdgasd"],但我只想要321

在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您只能在第一个捕获组中匹配数字,并使用单词边界\b来防止text,并且这些数字是较大单词的一部分。

请注意,在使用RegExp构造函数时,请再次转义反斜杠。

\btext (\d+)\b

Regex demo

const str = 'fasdfsdanvczx fdasvczx text 321,fasdgasdf';
let res = str.toLowerCase().match(new RegExp('\\btext (\\d+)\\b'));
console.log(res[1]);

答案 1 :(得分:1)

使用后向查找“文本”之后的数字:

(?<=text )\d+

或者简单地匹配零件并选择第二组:

(text )(\d+)

答案 2 :(得分:0)

您可以尝试拆分两次:

var str = 'fasdfsdanvczx fdasvczx text 321,fasdgasdf';
var num = str.split(/text /)[1].split(/\D/)[0];
console.log(num);

第一个分支留下321,fasdgasdf,第二个分支从逗号开始丢弃所有内容。

相关问题