我需要一个正则表达式来删除字符串中的任何BBCode。 我已经有以下内容(以及一个标签数组):
new RegExp('\\[' + tags[index] + '](.*?)\\[/' + tags[index] + ']');
它可以很好地识别[tag]this[/tag],但在使用[url=http://google.com]this[/url]时失败。
我需要做出哪些改变?非常感谢。
我需要一个正则表达式来删除字符串中的任何BBCode。 我已经有以下内容(以及一个标签数组):
new RegExp('\\[' + tags[index] + '](.*?)\\[/' + tags[index] + ']');
它可以很好地识别[tag]this[/tag],但在使用[url=http://google.com]this[/url]时失败。
我需要做出哪些改变?非常感谢。
我看到了这个帖子,发现它对我找到正确方向很有帮助。但是,以下是我花费两个小时编写的JavaScript正则表达式,经过测试可以非常好地处理复杂嵌套和错误嵌套的字符串,它完美运行!
string = string.replace(/\[\/?(?:b|i|u|url|quote|code|img|color|size)*?.*?\]/img, '');
在标签后,你必须允许任何字符出现,直到找到“]”为止。
new RegExp('\\[' + tags[index] + '[^]]*](.*?)\\[/' + tags[index] + ']');
\[[^]]*]([^[]*)\[\\[^]]*]
[WrongTag]stuff[\WrongTag]
。匹配嵌套标签需要多次使用表达式。要去除任何BBCode,可以使用类似以下的代码:
string alltags = tags.Join("|");
RegExp stripbb = new RegExp('\\[/?(' + alltags + ')[^]]*\\]');
你可以使用反向引用来检查平衡标签:
new RegExp('\\[(' + tags.Join('|') + ')[^]]*](.*?)\\[/\\1]');
真正的问题在于你无法在正则表达式中匹配任意嵌套标签(这是正则语言的限制)。一些语言确实允许使用递归正则表达式,但这些都是扩展(从技术上讲,它们不再是正则的,但并不改变大多数人对对象的称呼)。
如果您不关心平衡标签,可以直接删除找到的任何标签:
new RegExp('\\[/?(?:' + tags.Join('|') + ')[^]]*]');
[quote:7e3af94210="username"]
以下方法对我有效:
$post = preg_replace('/[\r\n]+/', "\n", $post);
$post = preg_replace('/\[\s*quote.*\][^[]*\[\s*\/quote.*\]/im', '', $post);
$post = trim($post);
第1行和第3行只是为了整理任何额外的换行符,以及由正则表达式留下的任何换行符。
我认为
new RegExp('\\[' + tags[index] + '(=[^\\]]+)?](.*?)\\[/' + tags[index] + ']');
str = str.replace(/\[([a-z]+)(\=[\w\d\.\,\\\/\"\'\#\,\-]*)*( *[a-z0-9]+\=.+)*\](.*?)\[\/\1\]/gi, "$4")
"[foo]dsdfs
fdsfsd[/foo]"
失败。要么通过在正则表达式中添加"(?s)"来启用DOTALL,要么将正则表达式中的DOT元字符替换为字符类[\S\s]。
tags
ж•°з»„дёӯз»ҷеҮәзҡ„д»»дҪ•ж ҮзӯҫгҖӮ - Gumbo