正则表达式匹配模式或匹配其他所有内容 - 匹配优先级问题

Regex to match pattern or match everything else - match precendence issue?

本文关键字:问题 优先级 模式 其他 正则表达式      更新时间:2023-09-26

我正在尝试编写一个将使用类似内容的正则表达式

/([;'.])|(['s'S]+)/gi

拆分此

a.b.cad0i2!--as.d;e;f;g00))(

进入这个

['a','.','b','.','cad0i2!--as','.','d',';','e',';','f',';','g00))(']

即。原始字符串中的所有内容都在最终数组中,输入正则表达式只是列出了一组复杂的潜在分隔符,我不想在正则表达式中重复分隔符列表。

这可能吗?

使用string.match函数。

> "a.b.cad0i2!--as.d;e;f;g00))(".match(/[^;.]+|[;.]/g)
[ 'a',
  '.',
  'b',
  '.',
  'cad0i2!--as',
  '.',
  'd',
  ';',
  'e',
  ';',
  'f',
  ';',
  'g00))(' ]

[^;.]+匹配任何字符,但不能匹配;.一次或多次。

| 或者,

[;.]匹配;.

试试这段代码:

var re = /(?=([.;])(?=[^.;]+))/gi; 
var str = 'a.b.cad0i2!--as.d;e;f;g00))(';
var res = [];
var result = str.split(re);
for (var letter of result) { 
  res.push(letter.replace(/^[.;](?=.+)/, ''));
}
alert(res);

结果:

a,.,b,.,cad0i2!--as,.,d,;,e,;,f,;,g00))(