请考虑以下网址:
<http://www.google.com>
<http://www.google.com|www.google.com>
<http://google.com|google.com>
我试图在<
或|
或>
我已尝试URL.match(/<([^>|\|]+)/g)
,但它始终捕获第一个<
所需的输出只是:http://www.google.com
答案 0 :(得分:3)
RegEx是正确的。 String#match
将返回完整的匹配集。您需要提取第一个捕获的组。
使用RegExp#exec
获取网址。
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;
您还可以使用String#match
,如下所示:
str.match(/[^<>|\s]+/g)
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;
答案 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)
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('|'));