Boris Moore的伟大jsrender库有一个错误。我既不完全理解正则表达式替换组中$&
(lastMatch)的含义,也不知道如何解决。
这篇文章告诉我不要在生产环境中使用该函数,并间接地告诉我不要实时使用JsRender
。
有人能向我解释一下吗,并更换一下线路:
tmplFn(tmplOrMarkup.replace(rEscapeQuotes, "\$&"), tmpl);
问候
编辑:无望
不幸的是,Jsender和JDK让另一个抱着孩子。Jsender说:$%运行良好,JDK说从未指定,也不是bug。
这实际上不是一个bug。您链接到的MDN文章是针对非标准RegEx.lastMatch()
API的,这是访问最后一个匹配的编程方式。但Jsender并没有使用那个API。
事实上,JsBinder在someString.replace(regex, replacementstring)
调用中使用"$&"
作为替换字符串中的替换模式,这是JavaScriptRegEx场景中的标准用法。
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace,上面写着:
替换字符串可以包括以下特殊的替换模式:$&插入匹配的子字符串。
这行代码中的正则表达式是rEscapeQuotes,它被声明为rEscapeQuotes = /['"\]/g
-,是一个有效的JavaScript正则表达式。
该行正在查找'
、"
或,并将它们替换为以
开头的相同字符。
顺便说一句,您不应该试图像运行Java正则表达式一样运行JsBinder中使用的相同正则表达式,因为在Java中,正则表达式的规则和有效性可能会大不相同。JsBinder当然在JavaScript环境中运行——浏览器,或者服务器上的Node.js。。。