javascript - 匹配模式的javascript正则表达式(有冲突)
问题描述
假设以下字符串:
^[message] [site](http://example.com)
现在,我需要一个提取“站点”和“ http://example.com ”的正则表达式。我想出了以下正则表达式:
/\[(.*?)\]\((.*?)\)/gm
但这不会[message]
从正则表达式结果中排除,而是返回message] [site
而不是site
.
我已经尝试了其他几种可能的正则表达式,但可以使它成为正确的。
有任何想法吗?
解决方案
根据您的字符串并使用 javascript,\^\[.*?\]\s\[(.*)\]\((.*?)\)/gm
只要您始终提取 group1, group2就足够了,但忽略 group0 ...尝试以下代码;
// set up a test string with multiple matches
var text = "daska ^[message] [site](site.com) fjhdfgk fafug ^[message2] [site2](site2.com) fgsadkfgaskf akfkakf";
// collect all matching groups globally
// (this creates an array of full matches which we can water down next)
var results = text.match( /\^\[.*?\]\s\[(.*?)\]\((.*?)\)/gm );
// output: ["^[message] [site](site.com)", "^[message2] [site2](site2.com)"]
// use the full matches to extract the groups we want,
// and then fill an array of matches
results = results.map( function( result ) {
var match = result.match( /\^\[.*?\]\s\[(.*?)\]\((.*?)\)/ );
return [ match[1], match[2] ];
});
// output: [["site", "site.com"], ["site2", ["site2.com"]]
你应该能够使用输出数组来做你需要的任何事情:)