我想将<>
和()
的匹配对替换为[]
。例如,
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 + ']';
});
}
但它看起来并不好。有什么想改进吗?
答案 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,']'));