Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript Regexp是否仅在值后跟某些字符时替换该值?_Javascript_Regex - Fatal编程技术网

JavaScript Regexp是否仅在值后跟某些字符时替换该值?

JavaScript Regexp是否仅在值后跟某些字符时替换该值?,javascript,regex,Javascript,Regex,我正试图找到一个正则表达式,它将搜索一个字符串并替换为一组新的字符。 我的绳子是这样的 (Product=='Partnership - CT'&&State==CT) 在这里,我必须搜索状态键的CT值,并替换为'CT'(即添加单引号)。我在JavaScript中使用了以下Regexp var expressionQuery = "(Product=='Partnership - CT'&&State==CT)"; val = 'CT'; expressionQ

我正试图找到一个正则表达式,它将搜索一个字符串并替换为一组新的字符。 我的绳子是这样的

(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+"\'" );
但这是以
(产品=='Partnership-'CT'&&State=='CT')的形式给出输出。

预期输出:
(产品=='Partnership-CT'&状态=='CT')


也就是说,我只想更改紧接==之后出现的CT实例。请帮助我编写表达式以解决此问题。

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

expressionQuery.replace(/State==([A-Z]{2})/g,"State=='$1'");
这意味着在子字符串“State==”后面加上任意两个字母,然后在replace表达式中加上“$1”,这意味着插入与括号中正则表达式部分匹配的任何内容。请注意,因为它专门查找“==”后面的字母,所以如果它们已经存在,则不会添加额外的引号

以及我的原始答案,它只替换指定的状态(无论是硬编码的还是由变量指示的):

您可以在“==”等页面上进行非捕获匹配,但我认为在搜索和替换文本中都包含“==”会更容易:

var expressionQuery = "(Product=='Partnership - CT'&&State==CT)",
    val = "CT";

expressionQuery.replace(new RegExp("==" + val, "g"),"=='"+val+"'" );
或者,您甚至可能希望在搜索中包含“State”,以防以后有其他可能匹配的参数,如“SomeOtherParam==CT”:

请注意,如果单引号位于带双引号的字符串中,则不需要对其进行转义。也就是说,
“”
做的事情与
“\”
做的事情相同


(还要注意,您的原始代码无效,因为您忘记在
expressionQuery
声明中的字符串周围加引号)

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

expressionQuery.replace(/State==([A-Z]{2})/g,"State=='$1'");
这意味着在子字符串“State==”后面加上任意两个字母,然后在replace表达式中加上“$1”,这意味着插入与括号中正则表达式部分匹配的任何内容。请注意,因为它专门查找“==”后面的字母,所以如果它们已经存在,则不会添加额外的引号

以及我的原始答案,它只替换指定的状态(无论是硬编码的还是由变量指示的):

您可以在“==”等页面上进行非捕获匹配,但我认为在搜索和替换文本中都包含“==”会更容易:

var expressionQuery = "(Product=='Partnership - CT'&&State==CT)",
    val = "CT";

expressionQuery.replace(new RegExp("==" + val, "g"),"=='"+val+"'" );
或者,您甚至可能希望在搜索中包含“State”,以防以后有其他可能匹配的参数,如“SomeOtherParam==CT”:

请注意,如果单引号位于带双引号的字符串中,则不需要对其进行转义。也就是说,
“”
做的事情与
“\”
做的事情相同


(还请注意,您的原始代码无效,因为您忘记在
expressionQuery
声明中的字符串周围加引号)

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

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

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

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

expressionQuery.replace(new RegExp('CT(?!\')', "g"),"\'"+val+"\'" );
它适用于您的示例,但我不知道该规则是否严格到足以在所有情况下避免错误替换。

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