gpt4 book ai didi

JavaScript:查找嵌套[引用]

转载 作者:行者123 更新时间:2023-11-30 23:42:06 25 4
gpt4 key购买 nike

我想用 JavaScript 在用户端进行表单验证(也使用 jQuery)。目标是删除嵌套的 bbCode [quote]标签比级别 2 更深。比如说,我们有这样的文本:

[quote=SoundMAX][quote=Laplundik][quote=SoundMAX]
blahblahblah[/quote]
blahblah
[/quote]
blah[/quote]

得到这个:

[quote=SoundMAX][quote=Laplundik]
blahblah
[/quote]
blah[/quote]

我唯一的想法是.replace [quote]<div> ,然后创建 DOM 对象并使用 jQuery 删除任何深度超过 2 的内容,并将所有内容向后解析为 bbCode。但这个解决方案似乎太复杂了,有没有更优雅的解决方案?

编辑:

感谢您提供好的解决方案。根据达里奥的回答,我这样做了:

var text=$('#edit-privatemsgbody').val();
var tmp=[];
var level=0;

for (var i=0,l=text.length;i<l;i++){
if(text[i]=='['&&text[i+1]=='q') level++;
if(text[i-6]=='q'&&text[i-7]=='/'&&text[i-8]=='[') level--;
if(level<3) tmp.push(text[i]);
}
alert(tmp.join(''));

效果很好。

但是idealmachine的解决方案就像是一闪而过。以前我不知道替换回调函数参数,现在很方便!我会解决的。

最佳答案

实际上,如果您将正则表达式视为无法处理嵌套本身的有限工具,则可以使用它。 .replace string 方法可以调用一个函数来查找每个匹配的替换文本,这使我们能够跟踪标记结构的深度(代码也发布在 http://jsfiddle.net/Zbgr3/3/ ):

var quoteLevel = 0;

alert(s.replace(/\[(\/?)quote[^\]]*\]|./gi, function(tag, slash) {
// Opening tag?
if(tag.length > 1 && !slash.length) quoteLevel += 1;
// What to strip
var strip = quoteLevel > 2;
// Closing tag?
if(tag.length > 1 && slash.length) quoteLevel -= 1;

if(strip) return '';
return tag;
}));

如果您希望对标记中的错误有一定的容忍度,您可以添加一些额外的代码,例如,防止 quoteLevel 低于零。

关于JavaScript:查找嵌套[引用],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4283474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com