如何替换多个匹配组中的特殊字符

时间:2016-12-17 12:47:26

标签: regex

如何在Google Apps脚本中使用正则表达式来替换文本中的特殊字符,而只替换某些字符串之间的特殊字符?

所以如果这是文本而x代表随机的字母数字字符......

XX @@ xxxSTARTxxx @@@ XXX $ xxxENDxxxxx @@££xxxSTARTxxxx££££XXX&安培;&安培;&安培;&安培;&安培; xxxxENDxxx

我需要什么样的正则表达式,所以我最终得到了

XX @@ xxxSTARTxxxxxxxxxENDxxxxx @@££xxxSTARTxxxxxxxxxxxENDxxx

1 个答案:

答案 0 :(得分:0)

您可以使用带有回调的替换:

var text = "xx@@xxxSTARTxxx@@@xxx$xxxENDxxxxx@@££xxxSTARTxxxx££££xxx&&&&&xxxxENDxxx";
var regex = /(START)([\s\S]*?)(END)/g;
var result = text.replace(regex, function ($0, $1, $2, $3) {
    return $1 + $2.replace(/[^\w\s]+/g, '') + $3;
});
console.log(result);
// => xx@@xxxSTARTxxxxxxxxxENDxxxxx@@££xxxSTARTxxxxxxxxxxxENDxxx

第一个正则表达式是一个简单的正则表达式,用于匹配两个字符串之间的字符串:

  • (START)-第1组($1):START(可以用任何模式替换)
  • ([\s\S]*?)-第2组($2):任意0个以上的字符,但应尽可能少
  • (END)-第3组($3):END(可以用任何模式替换)

我在这里使用的用于匹配特殊字符的正则表达式为[^\w\s],它匹配除ASCII字母,数字,_和空格之外的任何1+个字符。

有关特殊字符正则表达式的更多变化,请参见Check for special characters in string