繁体   English   中英

正则表达式匹配匹配集之后的所有内容(匹配集除外)

[英]Regex match everything after match set except for match set

这可能是一个简单的表达方式,但与此同时我却经历了最艰难的时光。 我需要匹配每个组有2个部分的组集,我们可以称其为操作和值。 除了另一个操作,我需要该值匹配任何操作之后的值。

要匹配的有效运算符(标准数学运算符): [>,<,=,!,....]

例如: '>=25!30<50'将导致三个匹配组:

1. (>=, 25) 2. (!, 30) 3. (<, 50)

我目前可以使用: /(>=|<=|>|<|!|=)(\\d*)/g上述问题,但这仅在第二个匹配集中的字符为数字时才有效。

我遇到的那堵墙是如何为指定操作员匹配除“除”之后的所有内容。

例如,我不知道如何解决: '<=2017-01-01'而不编写正则表达式来指定我允许的每个字符(除运算符外的任何字符),而且看起来不像正确的解决方案。

必须有一种方法可以做到这一点! 多谢你们。

我认为这是您需要的:

/((?:>=|<=|>|<|!|=)[^>=<!]+)/g

^排除您不需要的字符,+表示任意数量的

您可以使用此代码

var str = ">=25!30<50";
var pattern = RegExp(/(?:([\<\>\=\!]{1,2})(\d+))/, "g");
var output = [];
let matchs = null;


while((matchs = pattern.exec(str)) != null) {

    output.push([matchs[1], matchs[2]]);
}

console.log(output);

输出数组:

0: Array [ ">=", "25" ]
​
1: Array [ "!", "30" ]
​
2: Array [ "<", "50" ]

您可能要做的是匹配操作(>=|<=|>|<|!|=) ,这将是2部分中的第一个,并且在捕获组中使用负前瞻进行匹配,而没有直接操作在右侧,这将是两个部分中的第二个。

(?:>=|<=|>|<|!|=)((?:(?!(?:>=|<=|>|<|!|=)).)+)

  • (?:>=|<=|>|<|!|=)使用交替匹配其中一项操作
  • (开始捕获组(其中将包含您的值)
    • (?:启动非捕获组
      • (?!(?:>=|<=|>|<|!|=)). 断言右边的内容是否定的超前表示,不是运算且与任何字符匹配.
    • )+关闭非捕获组并重复一次或多次
  • )关闭捕获组

 const regex = /(?:>=|<=|>|<|!|=)((?:(?!(?:>=|<=|>|<|!|=)).)+)/gm; const strings = [ ">=25!30<50", ">=test!30<$@#%", "34" ]; let m; strings.forEach((s) => { while ((m = regex.exec(s)) !== null) { if (m.index === regex.lastIndex) { regex.lastIndex++; } console.log(m[1]); } }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM