替换$&正则表达集团

时间:2016-07-28 08:22:33

标签: regex jsrender regex-group

鲍里斯摩尔伟大的jsrender图书馆has one bug。我既不完全理解正则表达式替换组中$&(lastMatch)的含义,也不知道如何解决。

这篇文章告诉我to not use the function in production environments,间接不使用JsRender直播。

任何人都可以向我解释并替换该行:

tmplFn(tmplOrMarkup.replace(rEscapeQuotes, "\\$&"), tmpl);

此致

编辑:绝望

不幸的是,JsRender和JDK让对方抱着孩子。 JsRender说:$%工作正常,JDK说没有指定,也不是错误。

1 个答案:

答案 0 :(得分:1)

这实际上不是一个错误。您链接到的MDN文章适用于非标准RegEx.lastMatch() API,这是访问最后一个匹配项的编程方式。但是JsRender没有使用该API。

事实上,JsRender在"$&"调用中使用someString.replace(regex, replacementstring)作为替换字符串中的替换模式 - 这是JavaScript RegEx场景中的标准用法。

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace,其中包含:

  

替换字符串可包括以下特殊替换模式:... $&插入匹配的子字符串。

该行代码中的正则表达式是rEscapeQuotes,它被声明为rEscapeQuotes = /['"\\]/g - 并且是一个有效的JavaScript正则表达式。

该行正在寻找' "\,并将其替换为前面带有\的相同字符。

顺便说一句,您不应该尝试运行JsRender中使用的相同正则表达式,就像它们是Java正则表达式一样,因为在Java中,正则表达式的规则和有效性可能完全不同。 JsRender当然在JavaScript环境中运行 - 浏览器或服务器上的Node.js ......