JavaScript Regexp除动态系列外,所有CHRACTER



因此,我正在研究一个OpenSource项目,以扩大我对JavaScript的了解,并创建了一个动态处理字符串的实用程序,并用其他字符串代替了特定的出现。p>一个例子是以下内容:

jdhfkjhs${c1}kdfjh$%^%$S654sgdsjh${c20}SUYTDRF^%$&*#(Y

假设我选择了字符'#',则regexp处理为:

########${c1}####################${c20}###############

我面临的问题是我的regexp /[^${cd}]/g也与Regexp内部的任何字符匹配,因此_,met$$$$$1234{}cccgg.之类的字符串将被返回为#####$$$$$1234{}ccc###

有没有一种方法可以与JavaScript一起捕获这样一个动态的组,还是应该找到一种实现自己在做的事情的替代方法?


对于某些上下文,可以在此处找到项目代码。

您可以匹配组并捕获以后还原,只匹配任何char(如果没有预期或使用[^]/[sS],则使用.(:

var rx = /(${cd+})|./g;
var str = 'jdhfkjhs${c1}kdfjh$%^%$S654sgdsjh${c20}SUYTDRF^%$&*#(Y';
var result = str.replace(rx, function ($0,$1) {
  return $1 ? $1 : '#';
});
console.log(result);

详细信息

  • (${cd+})-第1组:字面的${c子字符串,然后是1 数字和一个字面的}
  • |-或
  • .-任何char以外的任何字符,但如果使用 [^][sS](。

在替换中,$0代表整个比赛,$1代表第一个捕获组的内容。如果设置了$1,则将其重新插入到结果的字符串中,否则,将char替换为#

最新更新