Javascript 多个同名的命名捕获组

Javascript 多个同名的命名捕获组,javascript,regex,Javascript,Regex,我尝试使用replace()方法替换较大字符串的子字符串。 我的正则表达式是#(?:[%$)([A-z0-9a-z]+)|([A-z0-9a-z]+)所以我要么匹配#$string123,要么匹配#$string123(这些字符串是较长字符串的子字符串),我希望替换“string123”部分,保留前面的“#”或“#$”,我正在考虑使用命名捕获组,然后使用replace()方法只替换指定的捕获组,但当然我不能有多个同名的捕获组,否则我可以只使用#(?:[%$](?[A-z0-9a-z]+)|(?[

我尝试使用replace()方法替换较大字符串的子字符串。 我的正则表达式是

#(?:[%$)([A-z0-9a-z]+)|([A-z0-9a-z]+)


所以我要么匹配#$string123,要么匹配#$string123(这些字符串是较长字符串的子字符串),我希望替换“string123”部分,保留前面的“#”或“#$”,我正在考虑使用命名捕获组,然后使用replace()方法只替换指定的捕获组,但当然我不能有多个同名的捕获组,否则我可以只使用

#(?:[%$](?[A-z0-9a-z]+)|(?[A-z0-9a-z]+)


就可以了

最后,我的问题是,有没有办法让多个捕获组具有相同的名称,或者有没有其他方法可以做到这一点,我不知道

谢谢。

您可以匹配
#
并使美元符号可选,而不是使用替代符号。在更换组中,先使用第1组,然后再进行更换

(#\$?)[A-Z0-9a-z]+

const regex=/(#\$?)[A-Z0-9a-z]+/g;
常量str=`\$string123
#弦123`;
const result=str.replace(正则表达式,$1replacement);

控制台日志(结果)您的正则表达式是否有输入错误?第一个
+
在组内,对吗<代码>#(?:[%$]([A-z0-9a-z]+)|([A-z0-9a-z]+)
?是的,它实际上在团队内部,这是一个打字错误。谢谢你,它工作得很好!我对正则表达式还是有点陌生,没有想过让美元成为可选的,现在我有了这个正则表达式
(?:\$?\\%?)[A-z0-9a-z]+
(它必须与#$或#%)并将#$string123替换为#$new\u字符串,这正是我想要的!不客气。我已经将模式更新为
A-z
应该是
A-z