Javascript 字符串匹配特定的正则表达式

标签 javascript regex

我想匹配此变量中的特定字符串。

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* 之前使用 ((?:\+|^)skip)? 捕获组\d+)*\s*=\s*\d+) 在模式中,找到每个匹配项,只要第 1 组不是未定义的,就跳过(或忽略)该匹配项,否则,获取第 2 组值。

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 次 +skipskip 位于字符串开头
  • (\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/

相关文章:

javascript - 在 jQuery Deferred/Promise 中包装 webSql executeSql 调用

regex - 使用 grep 获取匹配后的下一个单词

java - 提取单词 "Class"之后的所有第一个单词

asp.net - 使用 Microsoft js 扩展简单文本框控件时出现 Sys.ParameterCountException

javascript - 将 Blob 转换为文件并在浏览器中预览(不是下载)

Javascript代码执行顺序奇怪

javascript - 正则表达式:删除(包括)最后一个下划线和文件扩展名之间的所有内容

java - 验证电子邮件(不发送确认)

python - 正则表达式-匹配之间捕获文本

javascript - 在回调中传递参数