Javascript 为什么这个正则表达式与字符串不完全匹配?
我正试图精确地匹配“http://”和“https://”,以便从URL中删除它们,尽管我遇到了一些问题,因为它也在URL本身中匹配字母 这是为什么?我如何修复它Javascript 为什么这个正则表达式与字符串不完全匹配?,javascript,regex,Javascript,Regex,我正试图精确地匹配“http://”和“https://”,以便从URL中删除它们,尽管我遇到了一些问题,因为它也在URL本身中匹配字母 这是为什么?我如何修复它 正则表达式[^https://$] 指: 匹配列表“htps://$”中不存在的任何单个字符 你的正则表达式意味着 [^http://$] 匹配除h、t、p、:、/、$之外的任何内容 您只需使用URLapi获取主机名,如果您只想替换http或http,则可以使用replace let url=['http://example.
正则表达式
[^https://$]
指:
匹配列表“htps://$”中不存在的任何单个字符
你的正则表达式意味着
[^http://$]
匹配除h、t、p、:、/、$之外的任何内容
您只需使用URL
api获取主机名,如果您只想替换http或http
,则可以使用replace
let url=['http://example.com/123', 'https://examples.com“,”example.com']
//获取主机名
forEach(url=>{
如果(//^https?:\//\//i.test(url)){
let parsed=新URL(URL)
console.log(已解析的主机名)
}否则{
console.log(url)
}
})
//删除http或https的步骤
forEach(url=>{
let replaced=url.replace(//^https?:\//\//i,“”)
console.log(已替换)
})
正如其他人所回答的,[^https://$]
不起作用,因为[^]
不是一个声明行开头的捕获组,而是一个否定字符类。您的正则表达式匹配任何不是字母h、t、p、s、:,/
的字符
[括号]
描述了一个字符类,而(括号)
描述了一个捕获组-可能是您正在寻找的。你可以更多地了解他们
看起来有点像您试图使用^
和$
符号,但这对于您的特定正则表达式不是一个好主意。这会断言行的开头在h
之前,行的结尾在/
之后,这意味着正则表达式将不匹配,除非字符串中只有https://
如果要匹配http://
和https://
,此正则表达式将完成以下操作:(https{0,1}:\/\/)
细分
(https{0,1}:\/\/)
()将其作为一个组捕获
http匹配“http”
s{0,1}匹配0或1“s”
:匹配“:”
\/\/按字面意思匹配“/”
如果要匹配()
和-
等字符,也可以通过转义它们来实现:
\(\)\- matches "()-" literally
祝你好运 为什么??因为
[^
…]
表示一个否定的字符类,所以每个既不是h
,t
,p
,s
,:
,/
也不是$
的字符都是匹配的。为什么不直接匹配/https:\/\/
并删除它呢?是的,很好的一点,如果我想查找并替换https://和http://?使用/https?:\/\/
,不要用不需要的结构填充正则表达式模式。一定要学习。是的,很好,如果我想同时查找和替换https://和http://呢?@AKL012答案已经涵盖了这两个案例,以及如何包含其他字符,如“()”和“-”?@AKL012这是什么意思?你能解释一下吗?您希望在哪里允许这些字符?