所以,我正在开发一个开源项目,以扩展我对JavaScript的了解,并创建了一个动态处理字符串的实用程序,并用其他字符串替换特定的事件。
以下是一个例子:
jdhfkjhs${c1}kdfjh$%^%$S654sgdsjh${c20}SUYTDRF^%$&*#(Y
假设我选择了字符'#',RegExp将其处理为:
########${c1}####################${c20}###############
我面临的问题是我的RegExp /[^\$\{c\d\}]/g
也匹配RegExp中的任何字符,因此_,met$$$$$1234{}cccgg.
之类的字符串将作为#####$$$$$1234{}ccc###
有没有办法可以通过JavaScript捕获这样一个动态组,或者我应该找到另一种方法来实现我的目标?
对于某些上下文,可以找到项目代码here。
答案 0 :(得分:1)
您可以匹配该组并将其捕获以便稍后恢复,并且只匹配任何字符(如果没有预期的换行符,则为.
或与[^]
/ [\s\S]
匹配)/ p>
var rx = /(\${c\d+})|./g;
var str = 'jdhfkjhs\${c1}kdfjh\$%^%\$S654sgdsjh\${c20}SUYTDRF^%\$&*#(Y';
var result = str.replace(rx, function ($0,$1) {
return $1 ? $1 : '#';
});
console.log(result);
<强>详情:
(\${c\d+})
- 第1组:文字${c
子字符串,然后是1位数字和文字}
|
- 或.
- 除了换行符之外的任何字符(如果您使用[^]
或[\s\S]
,则为任何字符。)在替换中,$0
代表整个匹配,$1
代表第一个捕获组的内容。如果设置了$1
,则会将其重新插入到生成的字符串中,否则,char将替换为#
。