我有这个文本块
[QUOTE=Name;123]Text[/QUOTE]
我正在尝试构建一个正则表达式来标识“名称”和“文本”部分并将这些变量拉出来。
这一切都进入了一个javascript str.replace函数,但有一段时间让它工作。
有什么想法吗?
谢谢!
答案 0 :(得分:2)
"[QUOTE=Name;123]Text[/QUOTE]".match(/\[QUOTE=(.*);.*\](.*)\[\/QUOTE\]/)
结果:
["[QUOTE=Name;123]Text[/QUOTE]", "Name", "Text"]
基本上你用(.*)
替换变量来解析它们,你需要转义特殊字符。
删除它们时,您可以执行以下操作:
"[QUOTE=Name;123]Text[/QUOTE]".replace(/\[QUOTE=.*;.*\].*\[\/QUOTE\]/, "[QUOTE=;123][/QUOTE]")
答案 1 :(得分:0)
试试这个(假设名称,文字是字母数字):
\[QUOTE=(\w+);123\](\w+)\[/QUOTE\]
var re = /\[QUOTE=(\w+);123\](\w+)\[\/QUOTE\]/;
var str = "[QUOTE=Name;123]Text[/QUOTE]";
var newstr = str.replace(re, "$1 - $2"); // $2 is text, $1 is name
根据您的要求编辑替换字符串。
答案 2 :(得分:0)
以下替换将执行:
var string = "[QUOTE=Name;123]Text[/QUOTE]";
var search = /\[QUOTE=(.*?);\d+\]([\s\S]*?)\[\/QUOTE\]/i;
var replacement = "Quoted by $1: $2";
var result = string.replace(re, replacement);
// result becomes "Quoted by Name: Text"
[quote=user;1]text[/quote]
以及[QUOTE=user;1]text[/QUOTE]
;
后跟数字,但忽略它。.
与换行符不匹配,因此我使用[\s\S]
来匹配所有字符。.*?
替换为[a-z0-9 ]*
。如果您知道用户名长度在3到20之间,则可以使用:[a-z0-9 ]{3,20}
这个RE非常简单,不适用于嵌套引号。就像使用正则表达式进行HTML解析一样,构建一个可以正确转换BB代码的RE是不可能的。使用真正的BB代码解析器搜索开始标记和结束标记,以便您可以正确关闭标记。