我有一个字符串
var txt="[!Qtextara1] Description1 [@Qtextara1]
[!Qtextarea2] Description2 [@Qtextarea2]"
我想使用正则表达式匹配此字符串 输出应该是这样的。
{Qtextara1: Description1, Qtextarea2: Description2}
是否可以使用正则表达式?请帮帮我..
提前谢谢。
答案 0 :(得分:4)
您可以使用以下正则表达式:
\[\!([\s\S]+?)\]\s+([\s\S]+?)\s*\[@\1\]
说明:
\[\!
- 匹配文字[!
([\s\S]+?)
- 捕获第1组以匹配[]
内的一个或多个字符(标记名称,我们稍后将需要)\]\s+
- 文字]
和一个或多个空白符号([\s\S]+?)
- 捕获第2组以捕获(甚至多线)描述\s*\[@\1\]
- 匹配0个或更多空格,后跟文字[@
,然后是对第一个捕获组(标记名称)的反向引用,然后是文字]
。< / LI>
请参阅demo。
var re = /\[\!([\s\S]+?)\]\s+([\s\S]+?)\s*\[@\1\]/g;
var test_str = '[!Qtextara1] Long Description Wi[th%^&*\n(Abra# $]Cadabra~!~## 1 [@Qtextara1]\n [!Qtextarea2] Description2 [@Qtextarea2]';
while ((m = re.exec(test_str)) !== null) {
alert(m[1] + ", " + m[2])
}
&#13;
答案 1 :(得分:0)
我得到了这个
txt.match(/(\[\![a-zA-Z0-9]*\]) ([a-zA-Z0-9]*) (\[\@[a-zA-Z0-9]*\])/);
分为3部分:
第1部分:
txt.match(/(\[\![a-zA-Z0-9]*\]) ([a-zA-Z0-9]*) (\[\@[a-zA-Z0-9]*\])/)[1];
"[!Qtextara1]"
第2部分:
txt.match(/(\[\![a-zA-Z0-9]*\]) ([a-zA-Z0-9]*) (\[\@[a-zA-Z0-9]*\])/)[2];
"Description1"
第3部分:
txt.match(/(\[\![a-zA-Z0-9]*\]) ([a-zA-Z0-9]*) (\[\@[a-zA-Z0-9]*\])/)[3];
"[@Qtextara1]"
但这可以大大改善。