因此,我正在研究一个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替换为#
。