替换 $®ex 组



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。。。

最新更新