表达式常规 - 返回参考

时间:2017-06-16 13:19:10

标签: javascript regex

我有这个信息:

  • target = 16-10-2017
  • pattern = /([0123][0-9])-(\1)-(\d{4})/g

我的问题。为何选择'返回参考'不工作?我想了解语法的作用以及我在哪里犯了错误。因为根据我的理解,第一组([0123][0-9])应该同时考虑数字' 10'和' 16'或不?为什么呢?

Regex Example Online

2 个答案:

答案 0 :(得分:3)

反向引用仅匹配使用相应捕获组捕获的相同文本。它不会重复模式,而是重复已经捕获的值。

在您的情况下,\1尝试在第一个16之后匹配-

在JS正则表达式中,您不能使用可在PCRE / Onigmo中使用的(?1) / \g<1>子例程调用,但您可以将子模式定义为变量并动态构建模式:

&#13;
&#13;
var target = "16-10-2017";
var  p1 = "[0123][0-9]";
var rx = new RegExp("(" + p1 + ")-(" + p1 + ")-(\\d{4})", "g");
console.log(target.replace(rx, "$1/$2/$3"));
&#13;
&#13;
&#13;

答案 1 :(得分:2)

也许您必须将正则表达式更改为此(([0123][0-9])-){2}(\d{4}),这意味着它应匹配两部分numbers[0123]的{​​{1}}的两部分,后跟{{ 1}} [a-9]

regex demo