首页 > 解决方案 > 正则表达式替换查询参数(++、+- 和 +)中的前导加号字符?

问题描述

我正在使用lunr.js

下面这个 Javascript 代码

var query = getUrlParameter('q');
var queryWithoutPlus = query.replace(/\+/g, " ");
searchField.value = queryWithoutPlus
index.search(queryWithoutPlus);

因此,查询参数字符串可能看起来像test+ABCD+Test++Test2+-Test+-Test+Test,代码用空格替换查询参数中的 + 字符,q以便以一种很好的方式向用户显示结果,但是搜索字符串像

“测试+测试-测试”

目前导致

“测试测试-测试”

我希望

“测试+测试-测试”

我尝试使用 tempQuery 连续多次修改查询

var tempQuery = query.replace(/\+\+/g, " -");
var queryWithoutPlus = tempQuery.replace(/\+\-/g, " -");

但这不适用于剩余的 + 字符并且感觉不对,所以我需要你的帮助。

它只是归结为使用正确的正则表达式(无论它可能是什么,欢迎提出建议)还是有更好的方法来使用 lunr.js 的查询参数?

标签: javascriptregexquery-parameterslunrjs

解决方案


您需要一个否定的后向查询(?<!\+)

"test+ABCD+Test++Test2+-Test+-Test+Test".replace(/(?<!\+)\+/g, " ")
>> "test ABCD Test +Test2 -Test -Test Test"

如前所述,这在某些浏览器上不可用,例如 Microsoft 的。在这种情况下,您需要用临时表达式替换

"test+ABCD+Test++Test2+-Test+-Test+Test".replace(/\+\+/g, "#spaceplus#")
  .replace(/\+/g, " ").replace(/#spaceplus#/g, " +")
>> "test ABCD Test +Test2 -Test -Test Test"

推荐阅读