我正在尝试使用正则表达式来搜索字符串并替换为新的字符集。 我的字符串是这样的。
(Product=='Partnership - CT'&&State==CT)
在这里,我必须搜索状态键的CT
值,并用'CT'
替换(即添加单引号)。我在JavaScript中使用了以下Regexp。
var expressionQuery = "(Product=='Partnership - CT'&&State==CT)";
val = 'CT';
expressionQuery.replace(new RegExp(val, "g"),"\'"+val+"\'" );
但这是输出(Product=='Partnership - 'CT''&&State=='CT')
预期输出:(Product=='Partnership - CT'&&State=='CT')
也就是说,我只想更改==之后立即出现的CT实例。请帮我写表达来解决这个问题。
答案 0 :(得分:5)
更新:您不必在正则表达式中对“CT”进行硬编码。如果您知道“State”参数将始终为双字母代码,则可以使用以下内容向任何状态添加引号:
expressionQuery.replace(/State==([A-Z]{2})/g,"State=='$1'");
这就是找到子字符串“State ==”后跟任意两个字母,然后在替换表达式中,它有“$ 1”,表示在括号中插入与正则表达式部分匹配的任何内容。请注意,因为它专门在“==”之后查找字母,所以如果它们已经存在,则不会添加额外的引号。
我的原始答案,它只替换指定的状态(无论是硬编码还是以变量表示):
您可以在“==”等处进行非捕获匹配,但我认为在搜索和替换文本中包含“==”会更容易:
var expressionQuery = "(Product=='Partnership - CT'&&State==CT)",
val = "CT";
expressionQuery.replace(new RegExp("==" + val, "g"),"=='"+val+"'" );
或者您甚至可能希望在搜索中包含“State”,以防您以后有其他可能匹配的参数,例如“SomeOtherParam == CT”:
expressionQuery.replace(new RegExp("State==" + val, "g"),"State=='"+val+"'" );
请注意,如果单引号位于以双精度引用的字符串中,则无需转义。即,"'"
与"\'"
完全相同。
(另请注意,您的原始代码无效,因为您忘记在expressionQuery
声明中的字符串周围添加任何引号。)
答案 1 :(得分:1)
您可以使用否定前瞻来确保在您要替换的模式之前没有'
。
expressionQuery.replace(new RegExp('CT(?!\')', "g"),"\'"+val+"\'" );
它适用于您的示例,但我不知道此规则是否足够严格以避免在所有情况下进行错误替换。