gpt4 book ai didi

javascript - string.split() 的正则表达式,用于在 url 上拆分字符串

转载 作者:行者123 更新时间:2023-12-04 10:33:14 24 4
gpt4 key购买 nike

我有一个用于在字符串中查找 url 的正则表达式,但是当我将它与 String.prototype.split() 一起使用时,它返回未定义的。

const regex = /(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g;
const str = "yay http://www.google.com woo www.google.com haha google.com";

console.log(str.match(regex));
// [ 'http://www.google.com', 'www.google.com', 'google.com' ]

console.log(str.split(regex));
// [ 'yay ','http://w',undefined,undefined,'',' woo ',undefined,undefined,'www.','',' haha ',undefined,undefined,undefined,'','' ]


经过一些研究,这似乎与捕获组有关。我尝试添加 :?到所有捕获组(用括号括起来的部分)并删除了未定义的。

const reg2 = /(?:http(?:s)?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&//=]*)/g

const str = "yay http://www.google.com woo www.google.com haha google.com";

console.log(str.split(reg2));
// [ 'yay ', ' woo ', ' haha ', '' ]


但它省略了网址。我期待返回:
[ 'yay ', 'http://www.google.com', ' woo ', 'www.google.com', ' haha ', 'google.com' ]

最佳答案

您也许可以在此处拆分空格:

var str = "yay http://www.google.com woo www.google.com haha google.com";
var parts = str.split(/\s+/);
console.log(parts);


如果此处确实需要前导/尾随空格,请尝试匹配模式:
<URL>|\s*\S+\s*

这将匹配一个 URL 或一系列非单词字符,周围有空格。考虑:

var str = "yay http://www.google.com woo www.google.com haha google.com";
console.log(str.match(/(?:http(s)?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&//=]*)|\s*\S+\s*/g));


这使用交替技巧首先尝试有选择地使用 URL,周围没有空格。失败,回退模式是 \s*\S\s* ,即任何其他带有前导/尾随空格的单词。

关于javascript - string.split() 的正则表达式,用于在 url 上拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60311712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com