如何用正则表达式清理YouTube视频标题中的冗余内容?
YouTube视频标题冗余内容清理的正则优化方案
需求背景
我需要清理YouTube视频标题中的冗余内容,比如「Official Video」「Audio」「Music Video」这类词汇,目前已实现一套基于正则的循环处理方案,但希望得到更高效、精准的优化建议。
需要移除的冗余词汇包括:
- Audio
- Video
- Lyrics
- Official
- Remaster
- 任意四位数字年份(如2020)
- 其他类似冗余标识
这些词汇可能出现在括号()、方括号[]内,或者在连字符-之后,也可能组合出现(比如「Some title - Official Video」需要清理为「Some title」)。
现有实现代码
const regex = /\s*[-\(\[]?\s*(-|official|video|audio|lyrics|lyric|hd|full|4k|music\s+video|\d{4})\s*[\)\]]?$/gi; function clearSearchTerm(title) { let newTitle; do { newTitle = title; title = title.replace(regex, ""); } while (newTitle !== title); return title; }
优化建议
1. 一次性匹配末尾所有冗余片段,移除循环
原正则仅匹配末尾单个关键词,需循环多次处理。优化后的正则可一次性匹配末尾所有连续的冗余块,无需循环,大幅提升效率:
const regex = /\s*(?:[-(\[]\s*(?:music\s+video|official|video|audio|lyrics|lyric|hd|full|4k|remaster|\d{4})\s*[)\]]?)+$/gi; function clearSearchTerm(title) { return title.replace(regex, '').trim(); }
说明:
(?:...)为非捕获组,减少不必要的内存占用+匹配一个或多个连续冗余片段,覆盖「- Official Video」「[Remaster 2023]」这类组合场景- 将长组合词
music\s+video放在最前,确保优先匹配完整组合,避免拆分识别
2. 支持清理标题中间的冗余内容(可选)
如果标题中间也存在冗余块(如「Song Title (Official) - Audio」),可调整正则匹配任意位置的冗余内容,同时清理残留的符号和空格:
function clearSearchTerm(title) { // 匹配任意位置的冗余块 const redundantRegex = /\s*(?:[-(\[]\s*(?:music\s+video|official|video|audio|lyrics|lyric|hd|full|4k|remaster|\d{4})\s*[)\]]?|\s*(?:music\s+video|official|video|audio|lyrics|lyric|hd|full|4k|remaster|\d{4})\s*[-)\]])/gi; let cleaned = title.replace(redundantRegex, ''); // 清理残留的多余空格、符号 cleaned = cleaned.replace(/\s*[-(\[]\s*|\s*[)\]]\s*|\s{2,}/g, ' ').trim(); // 防止清理后标题为空,保留原标题兜底 return cleaned || title; }
3. 精准匹配变体词汇(可扩展)
如果需要覆盖更多变体(如「Remastered」「Lyric Video」),可将关键词列表抽离为变量,便于后续扩展和维护:
const keywords = 'music\\s+video|official|video|audio|lyrics|lyric|lyric\\s+video|hd|full|4k|remaster|remastered|\\d{4}'; const regex = new RegExp(`\\s*(?:[-\\(\\[]\\s*(${keywords})\\s*[\\)\\]]?)+$`, 'gi');
4. 典型场景测试验证
针对常见标题场景测试:
- 输入:
Some title - Official Video→ 输出:Some title - 输入:
Another Song [Remastered 2023] (Audio)→ 输出:Another Song - 输入:
HD Full Video - 2022 Official Lyric→ 输出:(清理后为空则返回原标题)
内容的提问来源于stack exchange,提问作者Milos Stojanovic
相关产品推荐
相关产品推荐

