首页 > 解决方案 > 匹配模式的javascript正则表达式(有冲突)

问题描述

假设以下字符串:

^[message] [site](http://example.com)

现在,我需要一个提取“站点”和“ http://example.com ”的正则表达式。我想出了以下正则表达式:

/\[(.*?)\]\((.*?)\)/gm

但这不会[message]从正则表达式结果中排除,而是返回message] [site而不是site.

我已经尝试了其他几种可能的正则表达式,但可以使它成为正确的。

有任何想法吗?

标签: javascriptregex

解决方案


根据您的字符串并使用 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"]]

你应该能够使用输出数组来做你需要的任何事情:)


推荐阅读