如何使用正则表达式获取带有元素的方括号

时间:2014-03-05 00:06:28

标签: javascript regex

我有以下字符串:

[5][Sport][one]

我想用以下字符串完全替换它:

<br />

我尝试了以下正则表达式,但它给了我方括号[5,Sport,one]的内容作为列表

/[^[\]]+(?=])/g

2 个答案:

答案 0 :(得分:0)

我不确定你的期望是什么,因为你没有给出你想要的输出......

所以你的意思是:

js> s = "[5][Sport][one]"
js> s.replace(/\]\[|\[|\]/g,"<br/>")
"<br/>5<br/>Sport<br/>one<br/>"

你可以使用.match来实现,我想你可能已尝试过:

js> "<br/>"+s.match(/[^[\]]+(?=])/g).join("<br/>")+"<br/>"
"<br/>5<br/>Sport<br/>one<br/>"

如果你不想要外<br/>,你可以这样做:

js> s.match(/[^[\]]+(?=])/g).join("<br/>")
"5<br/>Sport<br/>one"

编辑:

给出你的评论,你想要:

js> s.replace(/(\[.*\]){3}/g,"<br/>")
"<br/>"

只会将完全三次[…]替换为<br/>

N.B。:请注意.*可能会对您的字符串产生副作用,因此您可能需要使用:

js> s.replace(/(\[[\d\w]+\]){3}/g,"<br/>")
"<br/>"

相反,它只匹配括号中的数字和字母。

编辑#2:正如@a​​aronm所建议的那样:

js> s.replace(/([[^]]]){3}/g,"<br/>")
"<br/>"

甚至是一个更好的解决方案,因为它会匹配包含除另一个[…]之外的所有内容的整理[…]字符串。

答案 1 :(得分:0)

由于正则表达式贪婪,表达式可以非常简单:

var s = '[5][Sport][one]';
var re = /\[.*\]/;

console.log(s.replace(re,'<br />')); // <br />

请注意,HTML不使用XML样式的空标记,因此您应使用<br />代替<br>