Javascript 正则表达式$1-9生产使用

Javascript 正则表达式$1-9生产使用,javascript,regex,Javascript,Regex,在生产中使用“$1-$9”安全吗?在MDN上,它会对此发出警告 两者之间有区别吗 str.replace(/[a-z]/g, $1, $2) 或 这根本无效: str.replace(/[a-z]/g, $1, $2) String.prototype.replace()只接受两个参数:正则表达式和替换。不能有两个替换字符串 $1、$2等通常仅在替换字符串中使用,例如 str.replace(/([a-z])-(\d)/g, "$1 $2") 如果要在替换字符串之外使用$1,$2,

在生产中使用“$1-$9”安全吗?在MDN上,它会对此发出警告

两者之间有区别吗

    str.replace(/[a-z]/g, $1, $2)


这根本无效:

str.replace(/[a-z]/g, $1, $2)
String.prototype.replace()
只接受两个参数:正则表达式和替换。不能有两个替换字符串

$1
$2
等通常仅在替换字符串中使用,例如

str.replace(/([a-z])-(\d)/g, "$1 $2")
如果要在替换字符串之外使用
$1
$2
,则它们不是全局变量,而是用于进行匹配的
RegExp
对象的属性

var re = /([a-z])-(\d)/;
re.exec(str);
console.log(re.$1, re.$2);
但没有什么理由这么做
re.exec
返回包含捕获组的数组,因此您可以执行以下操作:

match = re.exec(str);
console.log(match[1], match[2]);

这是访问捕获组的符合标准的方式,因此没有充分的理由使用非标准属性。

如果文档中说使用它不明智,也许您不应该使用它?您对您的用户将使用的浏览器了解多少?我们正在使用所有浏览器
match = re.exec(str);
console.log(match[1], match[2]);