我难以定位,捕获和替换跨越多行的一些BBCode(到HTML)。
特别是[QUOTE]
代码..
我已阅读/搜索并了解javascript / jQuery中没有dotall,并且使用[\s\S]
或[^]
代替..但我似乎无法弄明白。
示例字符串(来自XML节点的文本)
<![CDATA[
[QUOTE=SOMENAME]Well I tell ya what .....
Sounds like a great project.
[/QUOTE]
[url]http://www.randomlink.com/something/[/url]
[url=https://www.another site.com/user/xxxxxxx]Sent from my whatever[/url]
[URL="http://www.somesite.com/"]http://www.somesite.com//[/URL]
]]>
我在regex101.com上一遍又一遍地试过,看看我是否能偶然发现它......但我永远无法把它弄好。
我需要定位[quote]
[/quote]
部分..
捕获&#34; SOMENAME&#34;在[QUOTE= ]
部分..以及两个[quote]
标记之间的文字。
这并没有得到完全匹配,但得到了我的初始标签和SOMENAME的第一个group1捕获
\[quote=(.*?)\]
这太过分了,进入下一个元素/节点,以及错误的group2捕获:
\[quote=([\s\S]+?)\](.*)\[
我如何才能正确地定位引用部分并正确地捕获两组...当它跨越多行时?
修改/更新
好像我在摸索正在运行的正则表达式解决方案时看起来很好。发布与他人分享这种方法对我有用。 (我确定其他方法吗?)
但是为了定位/捕获跨越多行的内容..我使用了这个正则表达式:
\[quote=(.*?)\]([^\[]+)\[\/quote]
但是,如果有人可以帮助解决多个NESTED报价标签以及如何替换它们......那就太受欢迎了。
答案 0 :(得分:1)
正则表达式可能是这样的:
(?:\[QUOTE=)([^\]]+)\]([^\[]+)(?:\[\/QUOTE\])
(?:\[QUOTE=)
匹配[QUOTE=
,其中 ?:
表示&#34;非捕获组&#34;。([^\]]+)
匹配任何不是结束方括号 ]
的内容。\]
匹配结束方括号 ]
。([^\[]+)
匹配任何不是开头方括号 [
的内容。(?:\[\/QUOTE\])
a&#34;非捕获组&#34;匹配[/QUOTE]
。现在,为了匹配多个嵌套 [quote]
标记并将其转换为HTML,如果将上述正则表达式分为两部分,则会更容易。第一部分替换所有出现的[QUOTE=SOMEONE]
,并将其替换为<blockquote>SOMEONE:
。
第二部分将用[\QUOTE]
替换所有</blockquote>
代码。
var btnProcess = document.getElementById('process');
btnProcess.addEventListener('click', function() {
var data = document.getElementById('data-txt').value;
data = data.trim().replace(/\r|\n|\r\n/g, "<br>");
data = data.replace(/(?:\[QUOTE=)([^\]]+)\]/gi, "<blockquote><strong>$1:</strong><br>");
data = data.replace(/\[\/QUOTE\]/ig, '</blockquote>');
document.getElementById('result').innerHTML = data;
});
&#13;
blockquote {
margin: 10px; padding: 5px; background-color: #eee; border: 1px dashed grey;
}
blockquote blockquote { background-color: #f1f1f1; }
blockquote blockquote blockquote { background-color: #f5f5f5; }
&#13;
<textarea id="data-txt" rows="5" cols="50">
[QUOTE=SOMEONE]Well I tell ya what .....
Sounds like a great project.
[QUOTE=anotherone]
[QUOTE=firstone] I need help with regex[/QUOTE]
I am going to make it!
and it'll be great
[/QUOTE]
I am excited too.
[/QUOTE]
</textarea><br>
<button id="process">Process</button>
<hr>
<strong>Result:</strong><br>
<div id="result"></div>
&#13;