正则表达式替换查询参数中的前导加号(++、+-和+)?
Regex to replace leading plus characters in query params (++, +- and +)?
我正在使用 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
中的 + 字符替换为空格,以更好地向用户显示结果,
目前搜索字符串空格
"test +test -test"
目前结果
"test test -test"
我需要的是:
"test +test -test"
我尝试使用临时查询多次修改生成的查询:
var tempQuery = query.replace(/\+\+/g, " -");
var queryWithoutPlus = tempQuery.replace(/\+\-/g, " -");
但这不适用于剩余的 + 个字符,而且感觉不正确。
是否只是归结为使用正确的正则表达式(不管它是什么,欢迎提出建议),还是有更好的方法来使用带有 lunr.js 的查询参数?
您需要一个 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"
我正在使用 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
中的 + 字符替换为空格,以更好地向用户显示结果,
目前搜索字符串空格
"test +test -test"
目前结果
"test test -test"
我需要的是:
"test +test -test"
我尝试使用临时查询多次修改生成的查询:
var tempQuery = query.replace(/\+\+/g, " -");
var queryWithoutPlus = tempQuery.replace(/\+\-/g, " -");
但这不适用于剩余的 + 个字符,而且感觉不正确。
是否只是归结为使用正确的正则表达式(不管它是什么,欢迎提出建议),还是有更好的方法来使用带有 lunr.js 的查询参数?
您需要一个 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"