JavaScript Regexp仅在遵循某些字符时才替换值?

时间:2011-12-21 06:44:06

标签: javascript regex

我正在尝试使用正则表达式来搜索字符串并替换为新的字符集。 我的字符串是这样的。

(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实例。请帮我写表达来解决这个问题。

2 个答案:

答案 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+"\'" );

它适用于您的示例,但我不知道此规则是否足够严格以避免在所有情况下进行错误替换。