1.正则表达式匹配:基于正则表达式对文本中的 URL 进行匹配和提取。例如,使用以下正则表达式即可匹配出上述示例中的视频链接。
const reg = /((?:https?:\/\/)?[\w/\-?=%.]+\.(?:douyin|tiktok)\.com\S+)/i;
const matches = (reg);
if (matches) {
const url = matches[1];
// 处理匹配到的 url
}
2.字符串切割:基于字符分隔和模式匹配对文本进行处理。例如,先将字符串按空格和换行符进行分割,再遍历每个分割后的字符,判断是否包含视频链接的主要特征。
const tokens = (/[\s\n]/);
for (let i = 0; i < ; i++) {
const token = tokens[i];
if (('') || ('')) {
const pos = ('http');
const url = pos >= 0 ? (pos) : '';
// 处理匹配到的 url
}
}
使用正则表达式匹配和字符串切割两种方法封装到 getUrl()
函数中的示例代码:
function getUrl(str) {
// 使用正则表达式匹配
const reg = /((?:https?:\/\/)?[\w/\-?=%.]+\.(?:douyin|tiktok)\.com\S+)/i;
const matches = (reg);
if (matches) {
return matches[1];
}
// 或者使用字符串分隔
const tokens = (/[\s\n]/);
for (let i = 0; i < ; i++) {
const token = tokens[i];
if (('') || ('')) {
const pos = ('http');
const url = pos >= 0 ? (pos) : '';
return url;
}
}
// 未能匹配到合法的URL,返回空值
return null;
}
使用时,只需要调用该函数并传入需要处理的文本,即可得到匹配到的视频链接。例如:
const str = '这是一段包含抖音视频和网页链接的文本,/video/xxx #抖音 视频 ';
const url = getUrl(str);
(url); // 输出:/video/xxx
算法优化
原算法可能无法正确解析一些 URL 链接,例如该示例中包含其他字符或标点符号的链接。如果需要更好的解析效果,可以通过以下方式尝试优化该算法:
-
考虑将正则表达式
reg
修改为更严格的匹配规则以避免错误的匹配。例如,只匹配以http://
或https://
开头的 URL 链接:/https?:\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g
-
在获取到匹配结果后,再进一步判断是否是有效的视频链接。例如,在上述语句中,可以考虑优先匹配包含
或
的链接,并排除掉其他非视频链接。可尝试使用如下代码进行优化:
function getUrl(str) {
const reg = /(https?:\/\/[\w\-./:]+\.(?:douyin|tiktok)\.com\/\S+)/i; // 正则表达式匹配
const matched = (reg); // 获取匹配结果
if (matched && > 0) { // 判断匹配结果是否存在并且不为空
return matched[0]; // 返回第一个匹配结果
}
return null; // 未匹配到则返回空值
}