替换函数结合if语句

时间:2017-02-20 18:04:05

标签: javascript regex

我有一个场景,其中包含相同的文本块,但它们的正则表达式转换是不一样的。

我希望在replace中使用函数回调,而不是接近重复的替换调用。但是,似乎我不能使用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]'

5 个答案:

答案 0 :(得分: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 + ']';
    }
});

答案 1 :(得分:0)

捕获作为函数参数传递。您可以在MDN

上详细了解相关信息
('{{text1}} blah blah blah blah blah blah {{para2}}').replace(/\{\{(\w+)(\d+)\}\}/g, function(match, $1, $2){
    if ( $1 === "text" ) {
        return '[' + $1 + '/' + $2 + ']';
    } else {
        return '[' + $1 + '----' + $2 + ']';
    }
});

该函数将捕获作为参数function(match, $1, $2)

传递

答案 2 :(得分:0)

('{{text1}} blah blah blah blah blah blah {{para2}}').replace(/\{\{(\w+)(\d+)\}\}/g, function(match,patt,index){

    if ( patt === "text" ) {
        return '['+patt+'/'+index+']';
    } else {
        return '['+patt+'----'+index+']';
    }
});

替换方法返回索引并将函数参数中的值匹配为i。

答案 3 :(得分:0)

您需要parse the arguments或者如果您知道该号码,您可以将它们作为固定参数获取:

console.log(
  ('{{text1}} blah blah blah blah blah blah {{para2}}')
  .replace(/\{\{(\w+)(\d+)\}\}/g, 
    function(match, capture1, capture2) {
      if (capture1 === "text") {
        return '[' + capture1 + "/" + capture2 + ']';
      } else {
        return '[' + capture1 + '----' + capture2 + ']';
      }
    })
);

答案 4 :(得分:0)

仅当menu-level2函数中的替换参数为字符串时,

font-weight: normal;个变量才可用。在功能的情况下,捕获的内容将通过功能中的参数来访问。因此,子匹配的数量提供了函数中的参数数量。

li

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace