javascript 如何解析具有多个URL的字符串?

vohkndzv  于 2023-09-29  发布在  Java
关注(0)|答案(4)|浏览(101)

例如,我有一个包含多个URL的字符串。

var str = '"test.com","test2.com","test3.com/123,312","test4.com/123,312"'

我想用这个字符串做一个数组。
首先,我尝试使用split(","),但有些URL有","
有什么好办法把这些分开吗?

6tqwzwtp

6tqwzwtp1#

你可以使用带有lookbehindAssert的正则表达式:

var str = '"test.com","test2.com","test3.com/123,312","test4.com/123,312"'

console.log(str.match(/(?<=")[^,][^"]+/g));

你也可以直接拆分字符串:

const str = '"test.com","test2.com","test3.com/123,312","test4.com/123,312"';
console.log(str.slice(1, -1).split('","'));

还有一个基准:

` Cycles: 1000000 / Chrome/117
--------------------------------------------------
Alexander slice   1.0x  |  101  104  105  105  114
Chris Barr        1.3x  |  129  132  134  139  140
Alexander regex   1.3x  |  131  136  138  140  141
vishal_g          3.2x  |  322  328  333  334  339
--------------------------------------------------
https://github.com/silentmantra/benchmark `
<script benchmark data-count="1000000">

const str = '"test.com","test2.com","test3.com/123,312","test4.com/123,312"'

// @benchmark vishal_g
str.match(/"(.*?)"/g).map(function(url) {
  return url.replace(/"/g, '');
});

// @benchmark Chris Barr
str.split(`","`).map(s => s.replace(/"/g, ''));

// @benchmark Alexander regex
str.match(/(?<=")[^,][^"]+/g);

// @benchmark Alexander slice
str.slice(1, -1).split('","');

</script>
<script src="https://cdn.jsdelivr.net/gh/silentmantra/benchmark/loader.js"></script>
nfs0ujit

nfs0ujit2#

如果字符串被","(一个引号,一个逗号和一个引号)分开,那么我们就有了所有可以保持内部逗号的URL。然后我们只需要删除数组中每个字符串中剩下的引号

var str = '"test.com","test2.com","test3.com/123,312","test4.com/123,312"';
var urls = str.split(`","`).map(s => s.replace(/"/g, ''));
console.log(urls);
fruv7luv

fruv7luv3#

也许只是从引号中提取URL?
你可以通过regex str.match(/".*?"/g).来实现。
或者只做str.split(",).map(url => url.substring(1))map部分仅删除前导引号。

u0njafvf

u0njafvf4#

在这种情况下,您可以使用正则表达式来解析字符串并提取URL。以下是如何使用JavaScript实现这一点:

var str = '"test.com","test2.com","test3.com/123,312","test4.com/123,312"';
var urls = str.match(/"(.*?)"/g).map(function(url) {
  return url.replace(/"/g, '');
});

console.log(urls);

说明:
str.match(/"(.*?)"/g)使用正则表达式匹配双引号中的文本,并返回匹配字符串数组。
.map(function(url) { return url.replace(/"/g, ''); })删除每个匹配URL的双引号。
urls数组将包含提取的URL。
这段代码应该可以处理你的示例字符串,也可以处理带逗号的URL。

相关问题