【问题标题】:JavaScript Regexp to replace a value only when it follows certain characters?JavaScript Regexp仅在某个值之后替换某个字符?
【发布时间】:2011-12-21 06:44:06
【问题描述】:

我正在尝试提出一个正则表达式,它将搜索字符串并替换为新的字符集。 我的字符串是这样的。

(Product=='Partnership - CT'&&State==CT)

在这里,我必须搜索状态键的 CT 值并替换为 'CT'(即添加单引号)。我在 JavaScript 中使用了以下正则表达式。

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

【问题讨论】:

  • 您真的只关心“CT”,还是需要考虑可能发生的任何状态?我已经用一种将引号添加到任何状态的方法更新了我的答案(答案假设状态总是有一个两个字母的代码,尽管当然有几种方法可以使它更加灵活)。

标签: javascript regex


【解决方案1】:

更新:您不必在正则表达式中硬编码“CT”。如果您知道“State”参数将始终是两个字母的代码,您可以在 any 状态中添加引号,如下所示:

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 声明中的字符串周围加上引号。)

【讨论】:

    【解决方案2】:

    您可以使用负前瞻来确保在要替换的模式之前没有'

    expressionQuery.replace(new RegExp('CT(?!\')', "g"),"\'"+val+"\'" );
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-02
      • 2018-06-30
      • 2020-02-14
      • 1970-01-01
      • 2015-04-11
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多