【问题标题】:Regex to replace leading plus characters in query params (++, +- and +)?正则表达式替换查询参数(++、+- 和 +)中的前导加号字符?
【发布时间】:2020-06-19 02:48:48
【问题描述】:

我正在使用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 的查询参数?

【问题讨论】:

    标签: javascript regex query-parameters lunrjs


    【解决方案1】:

    你需要一个negative lookbehind查询(?<!\+)

    "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"
    

    【讨论】:

    • 哇!使用正则表达式对我来说非常困难,显然不是每个人都适合。非常感谢你的帮助。听说过前瞻,通过后瞻,我今天学到了一些新东西。
    • 仅供参考,我已经测试过这个正则表达式,它在 Internet Explorer 中不起作用,只是在 Chrome 中,可能与 ECMA2018 支持有关,请参阅 stackoverflow.com/questions/50011366 或斜杠语法。
    猜你喜欢
    • 2016-09-03
    • 2014-01-12
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2016-03-24
    相关资源
    最近更新 更多