javascript - 替换函数与 if 语句组合

标签 javascript regex

我有一个场景,其中文本 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/

相关文章:

regex - 范围> = 0但小于1000的正则表达式

php - 在我的代码中查找字符串文字

javascript - 更新 Meteor 用户配置文件中的购物车对象

javascript - 使用 onclick 调用函数或使用 .click 绑定(bind)事件哪个更好?

python - 根据第一个字符的出现分隔字符串列

java - 如何根据更改的字符而不是单个分隔符来拆分字符串?

ruby - 用于 Sublime Text 的正则表达式字符串,用于在两个逗号之间查找电子邮件地址

javascript - React Material Design onclick列表项突出显示项目/事件

javascript - 自动将来自 "company"的帖子发送到所述 "company"的 Facebook 页面

javascript - 导致竞争条件的环回事件流