优雅的方式来取代parens

时间:2011-12-22 05:58:59

标签: javascript regex

我想将<>()的匹配对替换为[]。例如,

abc(def)hij -> abc[def]hij
abc<def>hij -> abc[def]hij

我的工作是这样的:

function getParensReplaced(str) {
    return str && str.replace(/<([^>]+)>/g, function(str, p){
        return '[' + p + ']';
    }).replace(/\(([^\)]+)\)/g, function(str, p){
        return '[' + p + ']';
    });
}

但它看起来并不好。有什么想改进吗?

3 个答案:

答案 0 :(得分:5)

为什么不使用简单的函数而不是正则表达式?

str ="abc<def>hij and abc(def)hij";
console.log(str);
function Replacer(str){
 return str.replace("<","[").replace(">","]").replace("(","[").replace(")","]")
}
console.log(Replacer(str));

答案 1 :(得分:3)

怎么样:

\([^\)]*?\)|<[^>]*?>

这样就可以了:

function getParensReplaced(str) {
    return str && str.replace(/\(([^\)]*?)\)|<([^>]*?)>/g, function(str, p,q){
        return (p == undefined) ?  '[' + q + ']': '[' + p + ']';
    });
}

JSfiddle:http://jsfiddle.net/GgrQm/

答案 2 :(得分:1)

或者另一个:

// replace <> and () with []

var re0 = /[<\(]/g;
var re1 = /[\)>]/g;
var s = '<here> are (some) angle <brackets> and (round ones)';

alert(s.replace(re0, '[').replace(re1,']'));