我有一个场景,其中文本 block 的包装相同,但它们的正则表达式转换不同。
我希望在替换中使用函数回调,而不是几乎重复的替换调用。不过好像不能用$1之类的?它只是按字面打印“$1”,而不是捕获组。
console.log(
('{{text1}} blah blah blah blah blah blah {{para2}}').replace(/\{\{(\w+)(\d+)\}\}/g, function(match){
if ( '$1' === "text" ) {
return '[$1/$2]';
} else {
return '[$1----$2]';
}
})
);
应该产生:
'[text/1] blah blah blah blah blah blah [para----2]'
但目前生产:
'[$1/$2] blah blah blah blah blah blah [$1----$2]'
最佳答案
如果您pass a function into replace ,它将在完全匹配参数之后将捕获的组作为位置参数。它不会尝试解释从函数返回的字符串。
您可以通过在函数中获取这些参数并使用它们构建您想要返回的字符串来解决您的问题:
('{{text1}} blah blah blah blah blah blah {{para2}}').replace(/\{\{(\w+)(\d+)\}\}/g, function(match, p1, p2){
if ( p1 === "text" ) {
return '[' + p1 + '/' + p2 + ']';
} else {
return '[' + p1 + '----' + p2 + ']';
}
});
关于javascript - 替换函数与 if 语句组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42351479/