【问题标题】:Javascript Regex to replace brackets with content insideJavascript正则表达式用里面的内容替换括号
【发布时间】:2015-07-25 12:37:29
【问题描述】:

我正在尝试构建一个正则表达式来用其他内容替换括号,在这种情况下,是一个 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");
}

它适用于简单的情况,但不会出现多次,也不会删除其他标签。周围有正则表达式大师吗?

【问题讨论】:

标签: javascript jquery regex


【解决方案1】:

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

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

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

【讨论】:

  • 你的意思是[^\][] 禁止括号(在你的散文中)?
  • [a[b]] 的结果应该是a&lt;div&gt;b&lt;/div&gt;?
  • @Jonny5:不,在这种情况下,第一个左括号被视为孤括号,因此结果应该是:[a&lt;div&gt;b&lt;/div&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多