JavaScript正则表达式:用括号内的内容替换括号。

3
我可以帮您进行翻译。这篇文章涉及到IT技术,需要将括号替换为其他内容,具体来说是一个div标签。因此,需要构建一个正则表达式。下面是需要翻译的内容:

我想构建一个正则表达式来将括号替换为其他内容,具体来说,是一个div标签。

所以,需要替换的文本如下:

This is a [sample] text

Would become:

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");
}

它在简单情况下工作正常,但无法处理多个出现次数和删除其他标签。有没有正则表达式大师?


http://regexr.com/3bfa6 - 但不包括嵌套的。 - Arun P Johny
似乎这正是使用正向先行断言的工作。 - Downgoat
1个回答

8

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

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

注意:您不需要转义字符类外的反方括号,它不是一个特殊字符。

你的意思是在你的散文中禁止方括号 [^\][] 吗? - anon
[a[b]]是什么意思 - 应该结果为a<div>b</div>吗? - Jonny 5
@Jonny5:不,这种情况下第一个开括号被视为孤立的括号,结果应该是:[a<div>b</div> - Casimir et Hippolyte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接