- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个 Javascript bbcode,类似于我用来编写此消息的代码。它还包含一个实时预览框,如下所示。我目前面临的唯一问题是某些嵌套的 bbcode 无法解析。
例如:
[quote]
[quote][/quote]
[/quote]
解析不正确。
这是我当前的 Javascript。
function preview() {
var txt = $('#editor').val();
txt = txt.replace(/</g,'<');
txt = txt.replace(/>/g,'>');
txt = txt.replace(/[\r\n]/g,'%lb%');
var find = [
/\[quote\](.*?)\[\/quote\]/gi,
/\[quote author="(.*?)" date="(.*?)"\](.*?)\[\/quote\]/gi,
/\[b\](.*?)\[\/b\]/gi,
/\[i\](.*?)\[\/i\]/gi,
/\[u\](.*?)\[\/u\]/gi,
/\[left\](.*?)\[\/left\]/gi,
/\[center\](.*?)\[\/center\]/gi,
/\[right\](.*?)\[\/right\]/gi,
/\[size=(10|12|24|30)](.*?)\[\/size\]/gi,
/\[font=(.*?)](.*?)\[\/font\]/gi,
/\[color=(.*?)](.*?)\[\/color\]/gi,
/\[url(?:\=?)(.*?)\](.*?)\[\/url\]/gi,
/\[email=(.*?)\](.*?)\[\/email\]/gi,
/\[email\](.*?)\[\/email\]/gi,
/\[img(.*?)\](.*?)\[\/img\]/gi,
/(?:%lb%|\s)*\[code(?:\=?)(?:.*?)\](?:%lb%|\s)*(.*?)(?:%lb%|\s)*\[\/code\](?:%lb%|\s)*/gi,
/\[list(.*?)\](.*?)\[\*\](.*?)(?:%lb%|\s)*(\[\*\].*?\[\/list\]|\[\/list\])/i,
/(?:%lb%|\s)*\[list\](?:%lb%|\s)*(.*?)(?:%lb%|\s)*\[\/list\](?:%lb%|\s)*/gi,
/(?:%lb%|\s)*\[list=(\d)\](?:%lb%|\s)*(.*?)(?:%lb%|\s)*\[\/list\](?:%lb%|\s)*/gi,
/(?:%lb%){3,}/g
];
var replace = [
'<blockquote><div class="quote"><div class="quote_body">$1</div></div></blockquote>',
'<blockquote><div class="quote"><div class="quote_author"><span class="quote_from">Quote from</span> <span class="author">$1</span> on <span class="date">$2</span></div><div class="quote_body">$3</div></div></blockquote>',
'<b>$1<\/b>',
'<i>$1<\/i>',
'<u>$1<\/u>',
'<div class="align_left">$1<\/div>',
'<div class="align_center">$1<\/div>',
'<div class="align_right">$1<\/div>',
'<span style="font-size:$1px;">$2</span>',
'<span style="font-family:$1;">$2</span>',
'<span style="color:$1;">$2</span>',
'<a href="$1">$2</a>',
'<a href="mailto:$1">$2</a>',
'<a href="mailto:$1">$1</a>',
'<img $1 src="$2" />',
'<pre><code>$1</code></pre>',
'[list$1]$2<li>$3</li>$4',
'<ul>$1</ul>',
'<ol start=$1>$2</ol>',
'%lb%%lb%'
];
// fix [*] so that they only work inside [/list]
for(var i in find)
{
txt = txt.replace(find[i],replace[i]);
if(i == 17) while(txt.match(find[i],replace[i])) txt = txt.replace(find[i],replace[i]);
}
// Fix Smilies
txt = txt.replace(/%lb%/g,'<br />');
txt = txt.replace(/\:\)/g, '<img class="smiley" src="/img/smilies/smile.gif">');
txt = txt.replace(/\:-\)/g, '<img class="smiley" src="/img/smilies/happy.gif">');
txt = txt.replace(/\:D/g, '<img class="smiley" src="/img/smilies/biggrin.gif">');
txt = txt.replace(/\:\(/g, '<img class="smiley" src="/img/smilies/sad.gif">');
txt = txt.replace(/8\)/g, '<img class="smiley" src="/img/smilies/cool.gif">');
txt = txt.replace(/=O/g, '<img class="smiley" src="/img/smilies/surprised.gif">');
txt = txt.replace(/\:-\|\|/g, '<img class="smiley" src="/img/smilies/mad.gif">');
txt = txt.replace(/\:P/g, '<img class="smiley" src="/img/smilies/stongue.gif">');
txt = txt.replace(/\}\-\(/g, '<img class="smiley" src="/img/smilies/confused.gif">');
// Format Dates
txt = txt.replace(/\d{10}/g, function($0) {
var d = new Date($0*1000);
var months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
return "" + months[d.getMonth()] + " " + d.getDate() + ", " + d.getFullYear() + ", " + (d.getHours()%12) + ":" + d.getMinutes() + " " + (d.getHours()<12 ? 'AM' : 'PM');
});
// Update the preview box
$('.preview').html(txt);
}
这会翻转我所有的 bbcode 标签。引用标签存在问题,因为它有时不会翻转嵌套的引用标签或解析内部引用标签的内容。
如果有人能够提供解决方案,我将非常感激。谢谢!
最佳答案
三种解决方案:
编写一个解析器。这将产生最佳解决方案,但需要付出巨大的努力。
查找 BBCode 解析库。质量可能与第一名一样好,而且更容易。
在每个标签正则表达式内部添加否定前瞻并连续应用,直到没有匹配项。例如:
\[quote\]((?:[^](?!\[quote\]))*?)\[\/quote\]
这将捕获内部引用,然后在替换后捕获外部引用。不像其他两个那么干净,但可能是最快的修复。
关于Javascript 不解析嵌套 Bbcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31001790/
基本上,我正在尝试将 xenforo 的论坛脚本数据库转换为我的自定义数据库(放弃我在 xenforo 上的使用),他们的 bbcode 让我很烦。 我正在尝试将他们的所有 url bbcode 更改
好吧,让我解释一下我的意思是哪种“剧透标签”: 在我所在的 phpBB 论坛中,有一个 [剧透] BBCode 隐藏了里面的文本,有一个显示/隐藏的按钮,应该看起来像发布页面中的 prosilver
所以我创建了这个函数来替换字符串中的特殊字符。主要目的是替换 BBCode 标签内的那些特殊字符([code=any]我想显示的代码[/code]),但当时它是否替换其余部分并不重要BBcode 标签
我有一些 javascript 会变成 [b]test[/b]进入 test 还有,这个 [i]test 2[/i]会变成 test 效果很好,但我也需要能够对其进行解码。对于多种类型的 bbcode
这是脚本的 jQuery 变体(它不起作用): $("div.post-content").each(function(){ if($(this).innerHTML.indexOf("[/
我有一个字符串想要转换为 div,但它无法正确关闭 div。 我使用的示例字符串是这样的: [quote]Quote by: user1 [quote]Quote by: user2 ads[/quo
我有这个函数来解析 bbcode -> html: $this->text = preg_replace(array( '/\[b\](.*?)\[\/b\]/ms', '/\[i
我正在尝试找到一种从字符串中删除 BBCode 的方法。我发现的模块(BBCode 和 Post Markup)似乎只将它们转换为 HTML,而不是仅仅删除 BBCode 并返回一个干净的字符串。如果
我在装有最新操作系统的 mac book air 上使用最新版本的 chrome 浏览器。我正在尝试在 javascript 中创建一个 BBcode 解析器。我可以很容易地解析一行代码,例如 [b]
我编写了一个 Javascript bbcode,类似于我用来编写此消息的代码。它还包含一个实时预览框,如下图所示。我目前面临的唯一问题是某些嵌套的 bbcode 未解析。 例如: [quote]
我需要一个正则表达式来去除字符串中的任何 BBCode。我有以下内容(和一个带有标签的数组): new RegExp('\\[' + tags[index] + '](.*?)\\[/' + tags
我有一个非常简单的 Javascript BBCode 解析器用于客户端实时预览(不想为此使用 Ajax)。问题是,这个解析器只识别第一个列表元素: function bbcode_parser(st
因此,我正在尝试向我的网站 (bbCodes) 添加笑脸符号,但我不知道该怎么做。我的数据库中有所有笑脸触发词和输出,以便更轻松地删除/添加笑脸。 下面的这段代码什么都不做...我没有收到错误,它也没
我已经阅读过有关此主题的其他帖子,但似乎没有一个有帮助。 好的,我正在编写自己的 BBCode 解析器。现在我的问题是如何不解析 [code] 标签之间的 BBCode?我真的不知道该怎么做。这是我当
所以看起来这个问题已经被问到太阳下的几乎所有语言......除了 C++。我有一个 XML 文档,在文本节点中存储了一些 bbcode。我正在寻找删除它的最佳方法,我想我会在这里查看是否有人知道一些预
我编写了一个 Javascript bbcode,类似于我用来编写此消息的代码。它还包含一个实时预览框,如下所示。我目前面临的唯一问题是某些嵌套的 bbcode 无法解析。 例如: [quote]
我正在使用 BBcode 编辑器通过表单发布内容。当我通过按 Enter 键然后发送表单并在屏幕上打印发送的文本来创建新行时,所有内容都在一行中,并且没有 BBcode 代表它。起初我以为我使用的编辑
我目前正在尝试测试匹配以下内容的正则表达式模式: [#123456] [#aabc36] 然后转换成HTML代码: 但是如果模式像这样: [/#123456] 然后被替换为 我尝试了以下模式: \
我有这个正则表达式: \[code(?:=(["']?)(.{0,50}?)\1)?\](?!\s*\[\/code\])(.*?)\[\/code\] 这个正则表达式应该支持: [code]cont
我正在研究 bbcodes 的自定义实现(基本上是 Wordpress 短代码)。为此,我需要匹配可以在两个类似 bbcode 的标签之间找到的内容。 例如: [example]The content
我是一名优秀的程序员,十分优秀!