UserScript 当地址中包含#号时@include匹配不到
时间: 2024-03-31 20:34:00 浏览: 76
UserScript 中的 @include 和 @match 都是使用 URL 匹配模式来确定哪些页面应该执行脚本。但是,当 URL 中包含特殊字符(如 #)时,匹配模式可能会失效。
这是因为在 URL 中,# 用于指定页面的锚点,后面的内容被浏览器解释为页面内的位置标识符,不会被发送到服务器端。因此,当浏览器请求页面时,# 及其后面的内容将被浏览器截取掉,不会被发送到服务器端。所以,对于 UserScript 中的 @include 和 @match,它们只能匹配到 URL 中 # 号之前的部分。
解决这个问题的方法是使用正则表达式来匹配 URL,例如:
```javascript
// 匹配所有包含 # 的 URL
// 注意:在正则表达式中,# 是特殊字符,需要使用转义符号 \# 来表示
// 例如:https://example.com/#foo、https://example.com/#bar
// @match /^https?:\/\/.+?#.+/
```
```javascript
// 匹配所有以 https://example.com/ 开头,后面跟一个 #,然后是任意字符的 URL
// 例如:https://example.com/#foo、https://example.com/#bar、https://example.com/#123
// @match /^https?:\/\/example\.com\/#.*/
```
需要注意的是,使用正则表达式来匹配 URL 可能会导致匹配结果不准确,需要根据实际情况进行调整和优化。
相关问题
UserScript @match匹配有井号的ip
如果你需要在 UserScript 中使用 @match 匹配有井号的 IP,你可以使用正则表达式来匹配。以下是一个示例:
```javascript
// 匹配以 192.168.0 开头,后面跟一个 #,然后是 1 到 3 个数字的 IP
// 例如:192.168.0#123、192.168.0#1、192.168.0#999
// 不匹配:192.168.0.123、192.168.0.1、192.168.0.999
// 注意:在正则表达式中,# 是特殊字符,需要使用转义符号 \# 来表示
// 如果要匹配任意字符,可以使用点号 . 来代替 #
// 例如:192.168.0.123、192.168.0.1、192.168.0.999 都会匹配
// @match https://192.168.0#\d{1,3}/
// @match https://192.168.0.\d{1,3}/
```
```javascript
// 匹配以 10.0.0 或 172.16.0 到 172.31.0 开头,后面跟一个 #,然后是 1 到 3 个数字的 IP
// 例如:10.0.0#123、172.16.0#1、172.31.0#999
// 不匹配:10.0.0.123、172.16.0.1、172.31.0.999
// @match https://(10.0.0|172.16.0#)\d{1,3}/
```
请注意,这些正则表达式可能不是完整的、最优的或最准确的,具体取决于您的需求。您需要根据实际情况进行调整和优化。
UserScript @match匹配192.168下的所有ip
可以使用以下正则表达式来匹配以192.168开头的所有IP地址:
```
/^192\.168\.\d{1,3}\.\d{1,3}$/
```
该正则表达式将匹配以192.168开头,后面跟着1到3个数字,然后是一个点,再后面跟着1到3个数字,最终以字符串结尾的所有IP地址。您可以将其用作UserScript的@match值,如下所示:
```
// ==UserScript==
// @name Example
// @match http://192.168.*
// ==/UserScript==
```
请注意,这种方法将匹配以192.168开头的所有URL,而不仅仅是IP地址。如果您只想匹配IP地址,请使用更具体的URL匹配模式。
阅读全文