我想匹配此变量中的特定字符串。
var string = '150-50-30-20=50+skip50-20-10-5=15+1*2*3*4=24+50-50*30*20=0+skip2*4*8=64';
这是我的正则表达式:
var string = '150-50-30-20=50+skip50-20-10-5=15+1*2*3*4=24+50-50*30*20=0+skip2*4*8=64';
var match_data = [];
match_data = string.match(/[0-9]+(?:((\s*\-\s*|\s*\*\s*)[0-9]+)*)\s*\=\s*[0-9]+(?:(\s*\+\s*[0-9]+(?:((\s*\-\s*|\s*\*\s*)[0-9]+)*)\s*=\s*[0-9]+)*)/g);
console.log(match_data);
输出将显示
[
0: "150-50-30-20=50"
1: "50-20-10-5=15+1*2*3*4=24+50-50*30*20=0"
2: "2*4*8=64"
]
我想从string
变量匹配的结果只是
[
0: "150-50-30-20=50"
1: "1*2*3*4=24"
2: "50-50*30*20=0"
]
最佳答案
您可以在 (\d+(?:\s*[-*\/+]\s* 之前使用
在模式中,找到每个匹配项,只要第 1 组不是未定义的,就跳过(或忽略)该匹配项,否则,获取第 2 组值。((?:\+|^)skip)?
捕获组\d+)*\s*=\s*\d+)
var string = '150-50-30-20=50+skip50-20-10-5=15+1*2*3*4=24+50-50*30*20=0+skip2*4*8=64',
reg = /((?:^|\+)skip)?(\d+(?:\s*[-*\/+]\s*\d+)*\s*=\s*\d+)/gi,
match_data = [],
m;
while(m=reg.exec(string)) {
if (!m[1]) {
match_data.push(m[2]);
}
}
console.log(match_data);
请注意,我在模式中添加了 /
和 +
运算符 ([-*\/+]
)。
正则表达式详细信息
((?:^|\+)skip)?
- 第 1 组(可选):出现 1 或 0 次+skip
或skip
位于字符串开头(\d+(?:\s*[-*\/+]\s*\d+)*\s*=\s*\d+)
- 第 2 组:\d+
- 1+ 位数字(?:\s*[-*\/+]\s*\d+)*
- 零次或多次重复\s*[-*\/+]\s*
--
、*
、/
,+
用 0+ 个空格括起来\d+
- 1+ 位数字
\s*=\s*
-=
包含 0+ 个空格\d+
- 1+ 位数字。
关于Javascript 字符串匹配特定的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56111041/