替换 $& 正则表达式组

Replace $& regex group

Boris Moore 出色的 jsrender 库 has one bug。我既不完全理解 $&(lastMatch) 在正则表达式替换组中的含义,也不知道如何解决。

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

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

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

此致

编辑:绝望

不幸的是JsRender和JDK离开了另一个抱着孩子。 JsRender 说:$% 工作正常,JDK 说从未指定也不是错误。

这实际上不是错误。您 link 阅读的 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,其中写着:

The replacement string can include the following special replacement patterns: ... $& Inserts the matched substring.

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

该行正在查找 ' "\ 并将它们替换为前面带有 \ 的相同字符。

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