如何将特定字符串与正则表达式匹配?

时间:2015-04-23 07:49:31

标签: javascript jquery regex

我有一个字符串

var txt="[!Qtextara1] Description1 [@Qtextara1]
        [!Qtextarea2] Description2 [@Qtextarea2]"

我想使用正则表达式匹配此字符串 输出应该是这样的。

{Qtextara1: Description1,  Qtextarea2: Description2} 

是否可以使用正则表达式?请帮帮我..
提前谢谢。

2 个答案:

答案 0 :(得分:4)

您可以使用以下正则表达式:

\[\!([\s\S]+?)\]\s+([\s\S]+?)\s*\[@\1\]

说明:

  • \[\! - 匹配文字[!
  • ([\s\S]+?) - 捕获第1组以匹配[]内的一个或多个字符(标记名称,我们稍后将需要)
  • \]\s+ - 文字]和一个或多个空白符号
  • ([\s\S]+?) - 捕获第2组以捕获(甚至多线)描述
  • \s*\[@\1\] - 匹配0个或更多空格,后跟文字[@,然后是对第一个捕获组(标记名称)的反向引用,然后是文字]。< / LI>

请参阅demo

&#13;
&#13;
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;
&#13;
&#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]"

但这可以大大改善。