REGEX帮助,=符号后的变量名称

时间:2011-08-07 21:37:50

标签: javascript regex

我有这个文本块

[QUOTE=Name;123]Text[/QUOTE]

我正在尝试构建一个正则表达式来标识“名称”和“文本”部分并将这些变量拉出来。

这一切都进入了一个javascript str.replace函数,但有一段时间让它工作。

有什么想法吗?

谢谢!

3 个答案:

答案 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代码解析器搜索开始标记和结束标记,以便您可以正确关闭标记。