使用 JavaScript 从 URL 中删除查询字符串
要从 url 中删除查询字符串,请使用 split()
方法在问号上拆分字符串并访问索引 0 处的数组元素,例如 url.split('?')[0]
。 split
方法将返回一个包含 2 个子字符串的数组,其中第一个元素是查询字符串之前的 url。
const url = 'https://example.com/books?page=10#hash';
// ✅ Remove querystring
const result1 = url.split('?')[0];
console.log(result1); // 👉️ "https://example.com/books"
// ✅ Remove querystring
const result2 = url.slice(0, url.indexOf('?'));
console.log(result2); // 👉️ "https://example.com/books"
// ✅ Preserve hash
const index = url.indexOf('?');
const result3 = url.slice(0, url.indexOf('?')) +
url.slice(url.indexOf('#'));
console.log(result3); // 👉️ "https://example.com/books#hash"
我们传递给 String.split
方法的唯一参数是我们要拆分字符串的分隔符。
const url = 'https://example.com/books?page=10#hash';
// 👇️ ['https://example.com/books', 'page=10#hash']
console.log(url.split('?'));
该方法返回一个包含 2 个字符串的数组 – 问号之前的一个和问号之后的一个。
此解决方案还处理 url 不包含查询字符串的情况。
const url = 'https://example.com/books';
// 👇️ ['https://example.com/books']
console.log(url.split('?'));
如果我们传递一个不包含在字符串中的子字符串,split()
方法将返回一个包含整个字符串的数组。
另一种方法是使用 String.indexOf
方法获取问号的索引。
要从 url 中删除查询字符串,请在 url 上调用 slice()
方法并获取从索引 0 到字符串中问号索引的字符。 slice
方法将返回一个不包含查询字符串的新字符串。
const url = 'https://example.com/books?page=10#hash';
const result2 = url.slice(0, url.indexOf('?'));
console.log(result2); // 👉️ "https://example.com/books"
我们传递给 String.slice
方法的 2 个参数是:
- start 索引 – 要包含在字符串中的第一个字符的索引
- stop 索引 – 上升到但不包括该索引
- indexOf 方法返回子串在字符串中第一次出现的索引,如果子串不在字符串中则返回 -1。
如果选择这种方法,这是我们需要处理的潜在边缘情况。
const url = 'https://example.com/books';
let result2 = url;
if (url.includes('?')) {
result2 = url.slice(0, url.indexOf('?'));
}
console.log(result2); // 👉️ "https://example.com/books"
我们的 if
语句处理 url 不包含查询字符串的情况。
如果我们需要删除查询字符串,但又想保留散列,请将对 slice
方法的两次调用连接起来。
const url = 'https://example.com/books?page=10#hash';
// // ✅ Preserve hash
const result3 = url.slice(0, url.indexOf('?')) +
url.slice(url.indexOf('#'));
console.log(result3); // 👉️ "https://example.com/books#hash"
对 slice
方法的第一次调用获取查询字符串之前的 url 部分。
第二次调用包含从散列开始的字符串。
如果将单个参数传递给
slice
方法,它会将字符包含到字符串的末尾。
我们可能需要处理 url 不包含查询字符串或哈希的情况。
const url = 'https://example.com/books?page=10#hash';
let result3 = url;
if (url.includes('?') && url.includes('#')) {
result3 = url.slice(0, url.indexOf('?')) +
url.slice(url.indexOf('#'));
}
console.log(result3);
在此示例中,如果 URL 包含查询字符串和哈希,我们仅重新分配 result3 变量,否则我们按原样返回 url。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。