【问题标题】:Regex keeps finding character I want matched along with previous character正则表达式不断寻找我想要与前一个字符匹配的字符
【发布时间】:2016-10-14 23:08:24
【问题描述】:

我在javascript 中有以下正则表达式用于拆分操作,因为我无法在后面查找任何分隔符,,而该字符串不是由\ 的一个或多个转义字符进行的.

[^\\],

正则表达式可以很好地查找\ 未处理的逗号在哪里,但也可以找到以逗号作为匹配项的字符,从而错误地拆分字符串。

例如,如果我有字符串

hello\,there,are

结果将是e, 匹配我的正则表达式,而不仅仅是,。读取拆分字符串数组

[hello\,ther] [are]

为什么我正在使用的正则表达式一直在查找逗号和后续字符,而不是仅匹配逗号?

【问题讨论】:

  • 因为您的reges由2个字符组成。它会找到的第一个字符是任何不是反斜杠的字符,第二个字符将是一个逗号。
  • @anubhava 是对的,您的正则表达式在逗号前匹配除 `\` 之外的任何内容。
  • @anubhava 谢谢,这就是我的想法。除了反转字符串来实现我的目标之外,javascript 中是否还有其他方法?
  • 您不能在此处使用split,因为您需要了解 JS 正则表达式不支持的情况。使用带有适当正则表达式的match

标签: javascript regex string


【解决方案1】:

你不能在这里使用split,因为你需要一个 JS 正则表达式不支持的后视。使用与适当的正则表达式匹配。如下图:

/(?:[^\\,]|\\.)+/g

请参阅regex demo

该模式将,\ ([^\\,]) 或(|) 以外的任何字符的1 个或多个(+) 序列与\\. 匹配

JS 演示:

var regex = /(?:[^\\,]|\\.)+/g;
var str = "hello\\,there,are";
var res = str.match(regex);
console.log(res);

【讨论】:

  • 等等...这是如何被接受的?如果你使用string.split(),它不起作用
  • @musefan .split() 不起作用,但 .match() 仍然按照 OP 的要求返回一个数组。
猜你喜欢
  • 1970-01-01
  • 2018-03-25
  • 2014-09-17
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
相关资源
最近更新 更多