我是regex的新手,它试图在子字符串text
之后和第一个非数字值之前获取数字。
我有:
const str = 'fasdfsdanvczx fdasvczx text 321,fasdgasdf';
str.toLowerCase().match(new RegExp('text (.*)[^0-9]'));
因此,我收到:
["text 321,fasdgasdf", "321,fasdgasd"]
,但我只想要321
。
在此先感谢您的帮助。
答案 0 :(得分:3)
您只能在第一个捕获组中匹配数字,并使用单词边界\b
来防止text
,并且这些数字是较大单词的一部分。
请注意,在使用RegExp构造函数时,请再次转义反斜杠。
\btext (\d+)\b
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
,第二个分支从逗号开始丢弃所有内容。