如何仅从 URL 中获取搜索词,忽略多个分隔符
Posted
技术标签:
【中文标题】如何仅从 URL 中获取搜索词,忽略多个分隔符【英文标题】:How to grab only search terms from URL, ignoring multiple delimiters 【发布时间】:2022-01-20 03:12:08 【问题描述】:如何编辑此代码以处理多个分隔符?目前,它会检查 %7
或 |relevance
并将其删除。但它不处理多个分隔符,例如下面的 2 个 URL 示例。
https://www.example.com/en-us/search?pq=marketing+agriculture%7Crelevance%7CbestSeller%3Atrue
https://www.example.com/en-us/search?pq=marketing+agriculture|Crelevance|CbestSeller%3Atrue
它应该只从上面的两个 URL 中获取:marketing Agriculture。
const params = new URLSearchParams(window.location.search);
if (params.has('pq'))
const pq = params.get('pq').split('&7').pop().replace('|relevance', '');
console.log(pq);
所需输出:仅从 URL 中获取搜索词。
【问题讨论】:
【参考方案1】:您可以使用javascript slice method 拆分网址并获取搜索词。
这适用于任何搜索词或任何长度。
示例如下:
var str1 = 'https://www.example.com/en-us/search?pq=marketing+agriculture%7Crelevance%7CbestSeller%3Atrue';
var str2 = 'https://www.example.com/en-us/search?pq=this+is+somthing+else|Crelevance|CbestSeller%3Atrue';
var pattern = /pq=[a-zA-Z+0-9]*/g;
var query1 = str1.match(pattern);
query1 = query1[0].replace('pq=', '').replaceAll('+', ' ');
console.log(query1);
var query2 = str2.match(pattern);
query2 = query2[0].replace('pq=', '').replaceAll('+', ' ');
console.log(query2);
为您的 URL 执行此操作:(您可能需要根据需要更改代码,但基本思想是这本身)
const params = new URLSearchParams(window.location.search);
if (params.has('pq'))
const pq = params.get('pq').split('|')[0];
console.log(pq);
【讨论】:
我得到:Uncaught TypeError: params.get(...).match(...) is null
用于测试用例 http://localhost:8080/?pq=marketing+agriculture%7Crelevance%7CbestSeller%3Atrue
【参考方案2】:
使用正则表达式:
const params = new URLSearchParams(window.location.search);
const regX = /(\w+[\+]?\w+)/gm;
if (params.has('pq'))
const pq = params.get('pq').match(regX);
console.log(pq && pq[0]);
【讨论】:
但这只有在用户搜索这两个词时才有效,marketing
和 agriculture
只是一个例子。它需要适用于任何搜索词。
我已经编辑了正则表达式,看看这是否对你有帮助。【参考方案3】:
这是一种方法:
let a = "https://www.example.com/en-us/search?pq=marketing+agriculture%7Crelevance%7CbestSeller%3Atrue"
// Converts Params to Object
const parseParams = (querystring) =>
// parse query string
const params = new URLSearchParams(querystring);
const obj = ;
// iterate over all keys
for (const key of params.keys())
if (params.getAll(key).length > 1)
obj[key] = params.getAll(key);
else
obj[key] = params.get(key);
return obj;
;
let aURL = new URL(a) // get the URL instance
let queryObj = parseParams(aURL.search) // grab and parse the parameter string (.search)
let search = queryObj.pq.split('|')[0] // grab the 'pq' prop (i.e that holds the search value.) and split it to get the actual search string
console.log(search)
【讨论】:
以上是关于如何仅从 URL 中获取搜索词,忽略多个分隔符的主要内容,如果未能解决你的问题,请参考以下文章