Javascript 当替换字符串中包含正则表达式时,为什么str.replace()行为异常?

Javascript 当替换字符串中包含正则表达式时,为什么str.replace()行为异常?,javascript,regex,string,Javascript,Regex,String,而预期的结果是replacementString值 为什么结果不同?有两个问题: $&是对JS替换模式中整个匹配值的反向引用,请使用$$&而不是$&参见 . 在index.js中没有转义。使用“//example.com/index\\\.js”代替“//example.com/index.js”,请参见和 JS固定代码段: 设a=; 设regex=newregexp ,‘g’; 让replacementString='document.cookie=e.replace/[^+$$&^ ` `

而预期的结果是replacementString值

为什么结果不同?

有两个问题:

$&是对JS替换模式中整个匹配值的反向引用,请使用$$&而不是$&参见 . 在index.js中没有转义。使用“//example.com/index\\\.js”代替“//example.com/index.js”,请参见和 JS固定代码段:

设a=; 设regex=newregexp ,‘g’; 让replacementString='document.cookie=e.replace/[^+$$&^ ` ` ` |]/g,encodeURIComponent.replace、%28.replace、%29+=+t.replace/[^+$$&\/:在将replacementString传递到a.replace之前,您可能会发现这篇文章很有用
let a =  `<script crossOrigin="anonymous" src="//example.com/index.js"></script>`

let regex = new RegExp(
            `<script(.*?) src="` + '//example.com/index.js' + `"></script>`, 'g')
let replacementString = 'document.cookie=e.replace(/[^+#$&^`|]/g,encodeURIComponent).replace("(","%28").replace(")","%29")+"="+t.replace(/[^+#$&\/:<-\[\]-}]/g,encodeURIComponent)+(r.domain?";domain="+r.domain:"")+(r.path?";path="+r.path:"")+(r.secure?";secure":"")+(r.httponly?";HttpOnly":"")'
b = a.replace(regex, replacementString)
document.cookie=e.replace(/[^+#<script crossOrigin="anonymous" src="//example.com/index.js"></script>^`|]/g,encodeURIComponent).replace("(","%28").replace(")","%29")+"="+t.replace(/[^+#<script crossOrigin="anonymous" src="//example.com/index.js"></script>/:<-[]-}]/g,encodeURIComponent)+(r.domain?";domain="+r.domain:"")+(r.path?";path="+r.path:"")+(r.secure?";secure":"")+(r.httponly?";HttpOnly":"")