我正在尝试构建一个正则表达式,用其他内容替换括号,在本例中为div标签..
所以,文字:
This is a [sample] text
会变成:
This is a <div>sample</div> text
问题是,它应该只在找到两个括号时替换,并保留内容。如果只找到一个括号,则应忽略它..
所以
This is a [sample text
或
This is a ] sample text
两者都保持不变。
它也应匹配多个出现,所以:
This [is] a [sample] [text]
会变成
This <div>is</div> a <div>sample</div> <div>text</div>
最后一件事,它应该删除(或至少忽略)嵌套括号,所以
This [[is a ] sample [[[ tag]]]
会变成
This <div>is a</div> sample <div> tag </div>
这是我到目前为止所得到的:
function highlightWords(string){
return string.replace(/(.*)\[+(.+)\]+(.*)/,"$1<div>$2</div>$3");
}
它适用于简单的情况,但不会出现多次出现,也不会删除其他标记。任何正则表达式掌握在哪里?
答案 0 :(得分:6)
无需在括号前后描述内容。您必须在内容说明中禁止使用括号,因此请使用[^\][]+
代替.+
。不要忘记为全局替换添加g
:
function highlightWords(string){
return string.replace(/\[+([^\][]+)]+/g,"<div>$1</div>");
}
注意:您不需要在字符类之外转义结束方括号,它不是特殊字符。