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

时间:2015-04-02 09:45:05

标签: javascript regex

我正在尝试编写一个使用类似

的正则表达式
/([;\.])|([\s\S]+)/gi

分开这个

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

进入这个

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

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

这可能吗?

2 个答案:

答案 0 :(得分:1)

使用string.match功能。

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

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

|或,

[;.]匹配;.

答案 1 :(得分:0)

试试这段代码:



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))(