我正在努力使用Regex来替换字符串中变量的名称。。。
我需要将某个变量名放在引号外,并且,如果该变量有一个限定符(如属性或方法(,则该限定符也需要放在最后一个字符串的引号外。
因此,举个例子:
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+'(完整消息:'+o Erro(+''
而我期望输出(注意引号内的括号(
出现错误:'+oErro.message+'(完整消息:'+eErro+'('
换句话说,每次在不带限定符的情况下使用"oErro"时,表达式都会获得下一个单词,并在括引号之外与oErro连接。
当然,我做错了什么,但我对RegExp不是很熟悉,可能没有搜索正确的术语来获得适当的帮助。
我需要的是一个适用于这两种情况的表达式(从最后一个字符串的引号中删除单词"oErro"或语法"oErro.something"(。。。
提前感谢,并为我糟糕的英语感到抱歉,我试着举一些例子,但如果你需要更多关于我需要实现的细节,请随时询问。
您可以使用
cExp=/oErro(?:.[^s;,)}]+)?/g
// Or, if the chars after `.` can only only be letters/digits/underscore
cExp = /oErro(?:.w+)?/g
然后,您需要使用
cMsg.replace(cExp, '' + $& + '')
其中CCD_ 1是对整个匹配值的反向引用。
图案详细信息
oErro
-文字字符串(?:.w+)?
-一个可选的(由于末尾为?
(非捕获组,与.
-一个点-w+
-1+字母/数字/下划线[^s;,)}]+
-除空白、;
、,
、$&
0和}
之外的1个或多个字符
I相信通过在正则表达式中使用\w字符可以满足捕获属性或方法名称的要求。
带oErro
cMsg = "Error ocurred: oErro; please try again";
cMsg.replace(/(oErro(.w+)?)/g, '' + $1 + '');
// Output: "Error ocurred: ' + oErro + '; please try again"
带oError.message
cMsg = "Error ocurred: oErro.message (complete message: oErro)";
cMsg.replace(/(oErro(.w+)?)/g, '' + $1 + '');
// Output: "Error ocurred: ' + oErro.message + ' (complete message: ' + oErro + ')"