Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这个正则表达式与字符串不完全匹配?_Javascript_Regex - Fatal编程技术网

Javascript 为什么这个正则表达式与字符串不完全匹配?

Javascript 为什么这个正则表达式与字符串不完全匹配?,javascript,regex,Javascript,Regex,我正试图精确地匹配“http://”和“https://”,以便从URL中删除它们,尽管我遇到了一些问题,因为它也在URL本身中匹配字母 这是为什么?我如何修复它 正则表达式[^https://$] 指: 匹配列表“htps://$”中不存在的任何单个字符 你的正则表达式意味着 [^http://$] 匹配除h、t、p、:、/、$之外的任何内容 您只需使用URLapi获取主机名,如果您只想替换http或http,则可以使用replace let url=['http://example.

我正试图精确地匹配“http://”和“https://”,以便从URL中删除它们,尽管我遇到了一些问题,因为它也在URL本身中匹配字母

这是为什么?我如何修复它


正则表达式
[^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这是什么意思?你能解释一下吗?您希望在哪里允许这些字符?