如何用正则表达式移除字符串中www.开头及不区分大小写的HTTP类URL?
解决方案
要同时匹配带协议(HTTP/HTTPS/FTP,不区分大小写)和www.开头的URL,你需要对原正则做两处关键修改:添加www.匹配规则,以及启用不区分大小写的修饰符。
修改后的正则表达式
/(?:https?|ftp):\/\/[\n\S]+|(?:www\.)[\n\S]+/gi
正则各部分解释
i修饰符:放在正则末尾,让整个匹配规则不区分大小写,这样HTTP://、HttPs://、WWW.example.com这类大小写混合的写法都能被精准匹配到。(?:https?|ftp):\/\/[\n\S]+:保留你原有的协议开头URL匹配逻辑,https?匹配HTTP/HTTPS,ftp匹配FTP协议,[\n\S]+匹配后续的域名、路径等非空白字符(包含换行符)。|(?:www\.)[\n\S]+:新增的www.开头匹配规则,(?:www\.)是非捕获组,专门匹配www.(不区分大小写),后面的[\n\S]+同样匹配后续的URL内容。g修饰符:全局匹配标识,确保替换掉输入中所有符合规则的URL,而不是只替换第一个匹配项。
修改后的完整代码
var _input = document.querySelector("#input"); var btn = document.querySelector("#btn"); var results = document.querySelector("#results"); btn.addEventListener("click", function() { var input_ = _input.value; // 替换为新的正则规则 var cleanInput = input_.replace(/(?:https?|ftp):\/\/[\n\S]+|(?:www\.)[\n\S]+/gi, ''); results.innerHTML = cleanInput; });
<textarea id="input" rows="5" style="width: 200px;"></textarea> <button id="btn">SUBMIT</button> <div id="results"></div>
小提示
这个正则在大多数日常场景下足够好用,但如果需要处理更复杂的URL边缘情况(比如包含特殊字符的路径、带端口号的URL等),可以进一步细化匹配规则,但针对你当前的需求,这个版本已经完全满足。
内容的提问来源于stack exchange,提问作者Christopher M.
相关产品推荐
相关产品推荐

