正则表达式在cretin字符后获取多个数字

时间:2018-09-29 19:28:52

标签: javascript regex

我有此文字

transaction A2999 num 111 from b123 c 6666666 t d 7777

我需要获取ct d之后的66666667777之后的数字(请注意字符之前和之后的空格) 我尝试过

 str.match(/\ c (\d+)/);

这给了我

Array(2)
0: " c 6666666"
1: "6666666"

我想我可以为每个数字运行相同的正则表达式两次,并获取数组中的最后一个col,但是我不确定它是最干净的方法...对我来说似乎不太乐观(就正则表达式而言,我是一个)

3 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式捕获组1和组2。

^.*\s+c\s+(\d+)\s+(?:t\s+d)\s+(\d+)$

在这里使用正则表达式

https://regex101.com/r/Ww9ZaR/1

答案 1 :(得分:1)

(\d+)\st\sd\s(\d+)$

var text = "transaction A2999 num 111 from b123 c 6666666 t d 7777"
var regex = /(\d+)\st\sd\s(\d+)$/

matches = text.match(regex);
console.log(matches);
// matches[1] = 6666666 
// matches[2] = 7777

答案 2 :(得分:1)

将正则表达式中的c更改为(?:c|t d),从而得到正则表达式/ (?:c|t d) (\d+)/

(?:...)与普通组(...)相同,但未捕获结果。因此,该组也称为non-capturing group

我还为正则表达式设置了全局标志(g),以允许在一个字符串中进行多个匹配。在 while 语句中使用RegExp exec method时,还需要避免无限循环。

var str = 'transaction A2999 num 111 from b123 c 6666666 t d 7777',
    regexp = /\ (?:c|t d) (\d+)/g,
    match;
    
while (match = regexp.exec(str)) {
    console.log(match);
}