RegExp替换精确或相似的单词JS



我正在努力使用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 + ')"

最新更新