鲍里斯摩尔伟大的jsrender图书馆has one bug。我既不完全理解正则表达式替换组中$&
(lastMatch)的含义,也不知道如何解决。
这篇文章告诉我to not use the function in production environments,间接不使用JsRender
直播。
任何人都可以向我解释并替换该行:
tmplFn(tmplOrMarkup.replace(rEscapeQuotes, "\\$&"), tmpl);
此致
不幸的是,JsRender和JDK让对方抱着孩子。 JsRender说:$%工作正常,JDK说没有指定,也不是错误。
答案 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 ......