试图把这个想象成正则表达式远不及我的强点:( 基本上我正试图获取bbcode标签之间的值:这可能看起来像下列之一:
[center]text[/center]
[left][center]text[/center][/left]
[right][left][center]text[/center][/left][/right]
目前有这个可怕的if else
代码块,可以防止它像上面的第三个选项一样变大。
if (/\[left\]|\[\/left\]/.test(text[2])) {
// set the value in the [left][/left] tags
text[2] = text[2].match(/\[left\](.*?)\[\/left\]/)[1];
} else if (/\[right\]|\[\/right\]/.test(text[2])) {
// set value in the [right][/right] tags
text[2] = text[2].match(/\[right\](.*?)\[\/right\]/)[1];
} else if (/\[center\]|\[\/center\]/.test(text[2])) {
// set value in the [right][/right] tags
text[2] = text[2].match(/\[center\](.*?)\[\/center\]/)[1];
}
我想做的是将其缩短为单个正则表达式从上面的例子中获取值text
,我已经得到了这样的表达式:
/\[(?:center|left|right)\](.*?)\[\/(?:center|left|right)\]/
但正如您在此RegExr demo中所看到的,它与我所需要的不符。
我怎样才能做到这一点?
它应该只与 left|right|center
匹配,因为所选文本也可以包含各种其他bbcode标记。
如果字符串如下所示:
[中心] [左] [IMG] /link/to/img.png [/ IMG] [/左] [/中心]
我希望得到left|center|right
标签之间的内容,在这种情况下是:
[img]/link/to/img.png[/img]
更多例子:
[center][url=lintosomething.com]LINK TEXT[/url][/center]
只能获得:[url=lintosomething.com]LINK TEXT[/url]
或者
[center]egibibskdfbgfdkfbg sd fgkgb fkgbgk fhwo3g regbiurb geir so go to [url=lintosomething.com]LINK TEXT[/url] and ibgri gbenkenbieurgnerougnerogrnreog erngo[/center]
婉婷:
egibibskdfbgfdkfbg sd fgkgb fkgbgk fhwo3g regbiurb geir so go to [url=lintosomething.com]LINK TEXT[/url] and ibgri gbenkenbieurgnerougnerogrnreog erngo
答案 0 :(得分:2)
为什么不用空字符串
替换所有这些标签var rawString; // your input string
var cleanedString = rawString.replace(~\[/?(left|right|center)\]~, '');
答案 1 :(得分:2)
编辑:好的,我认为这符合您的需求。
我的正则表达式:
/[^\]\[]*\[(\w+)[=\.\"\w]*\][^\]]+\[\/\1\][^\]\[]*/g
说明:
<强> See it in action 强>
但是我想说的是,如果你要解析bbcodes,你几乎肯定会更好地使用bbparser。
答案 2 :(得分:1)
您可以使用这样的捕获组:
(?:\[\w+\])*(\w+)(?:\[\/\w+\])*
或者使用名为&#34;值&#34;的捕获组像这样:
(?:\[\w+\])*(?<value>\w+)(?:\[\/\w+\])*
第一组和最后一组是非捕获的...... (?: ...)
中间组正在抓取(\w+)
中间组如果命名为(?<value>\w+)
注意:为简单起见,我用\ w +替换了你的中心|左|右值,但是你可以将它们交换回来而没有任何影响。
我使用名为RegExRX的应用。这是一个包含RegEx和捕获值的屏幕截图。
你可以调整它的很多方法。祝你好运!