替换包含特殊字符的字符串

时间:2018-08-17 11:06:48

标签: javascript regex

尝试替换包含特殊字符的字符串。这样做的目的是将查询字符串转换为最终用户可以理解的格式。

完整字符串为:

var str = 'active=true^opened_by=6816f79cc0a8016401c5a33be04be441^ORassigned_to!=6816f79cc0a8016401c5a33be04be441^short_descriptionISNOTEMPTY^NQopened_atONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()^EQ';

具体来说,^NQ之后的部分,在此示例中:opened_atONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()。我用indexOf(^NQ)分割了原始字符串,并将生成的子字符串传递给函数。然后,我尝试使用.replace(),如下所示:

var today = replacementString.replace(/(ONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday())/g, ' is today ');
replacementString = today;

我已经尝试了以上行的各种组合,但是没有返回我想要的。

我替换特殊字符或没有特殊字符的字符串都没有问题,但是两者的结合使我感到困惑/沮丧。

任何建议或指导将不胜感激

1 个答案:

答案 0 :(得分:0)

您应从()\(\)进行转义以从字面上进行匹配,否则将意味着capturing group。对于匹配,您还可以省略外部括号,并且必须转义点\.以使其与字面值匹配。

ONToday@javascript:gs\.beginningOfToday\(\)@javascript:gs\.endOfToday\(\)

var str = 'active=true^opened_by=6816f79cc0a8016401c5a33be04be441^ORassigned_to!=6816f79cc0a8016401c5a33be04be441^short_descriptionISNOTEMPTY^NQopened_atONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()^EQ';
var today = str.replace(/ONToday@javascript:gs\.beginningOfToday\(\)@javascript:gs\.endOfToday\(\)/g, ' is today ');
replacementString = today;
console.log(today);