Javascript Regex用内容替换括号

时间:2015-07-25 03:11:04

标签: javascript jquery regex

我正在尝试构建一个正则表达式,用其他内容替换括号,在本例中为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");
}

它适用于简单的情况,但不会出现多次出现,也不会删除其他标记。任何正则表达式掌握在哪里?

1 个答案:

答案 0 :(得分:6)

无需在括号前后描述内容。您必须在内容说明中禁止使用括号,因此请使用[^\][]+代替.+。不要忘记为全局替换添加g

function highlightWords(string){
    return string.replace(/\[+([^\][]+)]+/g,"<div>$1</div>");
}

注意:您不需要在字符类之外转义结束方括号,它不是特殊字符。