【发布时间】:2020-04-19 17:37:28
【问题描述】:
我正在努力使用正则表达式来替换字符串中的变量名称...
我需要将某些变量名放在引号之外,并且,如果该变量有一个限定符(如属性或方法),这个限定符也需要在最终字符串中的引号之外。
所以,给出这个例子:
cExp = new RegExp('oErro', 'g');
cMsg = "Error ocurred: oErro; please try again";
cMsg.replace(cExp, '\' + oErro + \'')
输出正是我所期望的:
'发生错误:' + oErro + ';请再试一次'
我搜索了如何在变量名之后包含任何单词,并最终得到了这段代码:
cExp = new RegExp('oErro(\.[^\ |^\;|^\,|^\)|^\}]*)', 'g');
cMsg = "Error ocurred: oErro.message; please try again";
cMsg.replace(cExp, '\' + oErro$1 + \'')
结果正是我所期望的:
'发生错误:' + oErro.message + ';请再试一次'
到目前为止,一切都很好。 但是,如果我将变量名与 variable.qualifier 混合使用,事情就会变得一团糟:
cExp = new RegExp('oErro(\.[^\ |^\;|^\,|^\)|^\}]*)', 'g');
cMsg = "Error ocurred: oErro.message (complete message: oErro)";
cMsg.replace(cExp, '\' + oErro$1 + \'')
我得到这个输出
'发生错误:' + oErro.message + '(完整消息:' + oErro)+ ''
虽然我期望这个输出(注意引号内的括号)
'发生错误:' + oErro.message + '(完整消息:' + oErro + ')'
换句话说,每次使用不带限定符的“oErro”时,表达式都会获取下一个单词并在封闭引号之外与 oErro 连接。
当然我做错了什么,但我对 RegExp 不是很熟悉,并且可能没有使用正确的术语进行搜索以获得适当的帮助。
我需要的是一个适用于两种情况的表达式(从最终字符串的引号中删除单词“oErro”或语法“oErro.something”)...
在此先感谢,对糟糕的英语感到抱歉,我尝试举一些例子,但如果您需要更多关于我需要实现的目标的详细信息,请随时询问。
【问题讨论】:
-
尝试
cExp = /oErro(?:\.\w+)?/g或cExp=/oErro(?:\.[^\s;,)}]+)?/g然后你需要使用.replace(cExp, '\' + $& + \'') -
@WiktorStribiżew 就像一个魅力!如何将此评论标记为答案?老实说,我不明白如何或为什么:在我看来,问号在搜索词之后变成了可选的点和单词(括号内),但我会搜索冒号的含义,因为我不清楚...非常感谢!
-
在下面查看我的答案,我添加了一些详细信息和有用的链接。很高兴它对你有用。
标签: javascript regex