如何仅从 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 中获取:ma​​rketing 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]);

【讨论】:

但这只有在用户搜索这两个词时才有效,marketingagriculture 只是一个例子。它需要适用于任何搜索词。 我已经编辑了正则表达式,看看这是否对你有帮助。【参考方案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 中获取搜索词,忽略多个分隔符的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中获取 PATH 环境变量分隔符?

laravel 搜索多个以空格分隔的单词

将逗号分隔的值作为搜索参数附加到 url [重复]

在 Java 中为 .split 使用多个分隔符

java,split 如何设置多个分隔符?

如何使用多个分隔符+JDBC