2011-09-22 66 views
3

我有这样的正则表达式表达我发现几个星期前JavaScript的正则表达式帮助BBCode的

/([\r\n])|(?:\[([a-z\*]{1,16})(?:=([^\x00-\x1F"'\(\)<>\[\]]{1,256}))?\])|(?:\[\/([a-z]{1,16})\])/ig 

,它的工作找到UBB标签比如[url][code]

但是,如果我尝试[url="http://www.google.com"]它不会匹配。我在RegExp方面并不擅长,但我无法弄清楚如何仍然有效,但="http://www.google.com"是可选的。

这也失败了[color="red"],但数字它是同样的问题url标签有。

回答

1

这一部分:[^\x00-\x1F"'\(\)<>\[\]]说,后=不能有一个”这意味着你的正则表达式匹配[url=http://stackoverflow.com]如果你想有引号,你可以简单地把它们在你的捕获组:。

/([\r\n])|(?:\[([a-z\*]{1,16})(?:="([^\x00-\x1F"'\(\)<>\[\]]{1,256})")?\])|(?:\[\/([a-z]{1,16})\])/gi 
+0

这个工作,但现在没有选项不起作用...像[url]不是 –

+0

/([\ r \ n])|(?:\ [([az \ *] {1,16 })(:=([^ \ x00- \ x1F的'\(\)<> \ [\]] {1256}?))\])|(?:?\ [\ /([AZ] {1, 16})\])/ ig –

+0

放置第二个“错误,现在它应该工作并匹配[url],[url]”sfdgs“]和[/ url] – topek

1

我认为你会从明确列明了所有你要匹配的标签,因为它应该允许关闭标签更具体的匹配受益

这里有一个sample code

您可能注意到,正则表达式,从一组较小的组成,每个代表一个可能的属性的单个标签((?:="[^"]*")?,参见下面的说明)的可变长度的,像[url="google.com"],并与交替操作者|分离。

(="[^"]*")?=符号,则一个双引号,随后比双引号([^"])在任何数量,即0以上,(*)以外的任何码元,接着进行闭引号。最后的?意味着整个组可能根本不存在。