RegEx捕获尖括号(或管道)之间的URL

时间:2016-01-17 15:26:40

标签: javascript regex

请考虑以下网址:

  • <http://www.google.com>
  • <http://www.google.com|www.google.com>
  • <http://google.com|google.com>

我试图在<|>

之后计算一个能够捕获网址的RegEx

我已尝试URL.match(/<([^>|\|]+)/g),但它始终捕获第一个<

所需的输出只是:http://www.google.com

4 个答案:

答案 0 :(得分:3)

RegEx是正确的。 String#match将返回完整的匹配集。您需要提取第一个捕获的组。

使用RegExp#exec获取网址。

&#13;
&#13;
var str = `<http://www.google.com>
<http://www.google.com|www.google.com>
<http://google.com|google.com>`;

var regex = /<([^>|\|]+)/g;

var urls = [];
while(match = regex.exec(str)) {
    urls.push(match[1]); // Get first captured group, and push in array
}

console.log(urls);
document.body.innerHTML = '<pre>' + JSON.stringify(urls, 0, 4) + '</pre>';
&#13;
&#13;
&#13;

您还可以使用String#match,如下所示:

str.match(/[^<>|\s]+/g)

&#13;
&#13;
var str = `<http://www.google.com>
<http://www.google.com|www.google.com>
<http://google.com|google.com>`;
var urls = str.match(/[^<>|\s]+/g);

console.log(urls);
document.body.innerHTML = '<pre>' + JSON.stringify(urls, 0, 4) + '</pre>';
&#13;
&#13;
&#13;

答案 1 :(得分:2)

这种模式并不复杂,需要正则表达式!您可以使用简单模式字符串操作

var url = "<http://www.google.com|www.google.com>";
var parts = url.replace(/^<|>$/, "").split("|");

对于使用正则表达式的解决方案,请尝试以下操作:

var url = "<http://www.google.com|www.google.com>";
var match = /(?:<|\|)([^>|]+)/g.exec(url);

然后,您可以像这样访问第一个捕获组的值:

var url = match[1];

通过多次在同一个正则表达式上调用exec,您可以找到多个匹配项(您要查找的多个网址)。

正则表达式的说明:

  • (?:<|\|)是一个非捕获组((?: ... )),在开头查找<|符号。 (在您的情况下,每个网址左侧都会有<|!)
  • ([^>|]+)是一个捕获组(( ... )),用于捕获 >|的字符序列。你不需要在一个字符类中转义|,它只有它之外的特殊含义。

答案 2 :(得分:1)

str.match(/(http\:.*)(?=\|)/)[0]

var strs = ["<http://www.google.com>",
"<http://www.google.com|www.google.com>",
"<http://google.com|google.com>"];

strs.forEach(function(str) {
  // if `str` contains `|` character,
  // match characters that are followed by `|`
  if (/\|/.test(str)) {
    console.log(str.match(/(http\:.*)(?=\|)/)[0])
  } 
  // else match characters that are not `<`, `>`
  else {
    console.log(str.match(/[^<>]+/)[0])
  }
})

答案 3 :(得分:0)

JS Fiddle

var url1 = '<http://www.google.com|www.example.com>',
  url2 = '<http://www.yahoo.com>';

console.log(url1.replace(/<|>/g, '').split('|'));
console.log(url2.replace(/<|>/g, '').split('|'));