javascript - 正则表达式替换查询参数(++、+- 和 +)中的前导加号字符?
问题描述
我正在使用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 的查询参数?
解决方案
您需要一个否定的后向查询(?<!\+)
"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"
推荐阅读
- python - ModuleNotFoundError:没有名为“芹菜”的模块
- javascript - 制作
- javascript - 如何压缩包括根目录在内的所有目录?
- ios - Incorrect Assets image loads in iPad
- azure-powershell - 在 Azure PowerShell 脚本中找不到 Microsoft.Azure.IpSecurityRestriction
- android - 开发一个应用程序,通过当前位置加载附近的地方并将数据位置数据显示到列表视图中
- sql - 客户维度
- android - Dalvik 验证器:copy1 v16<-v22 type=2 cat=1
- android - FCM 需要多长时间才能将推送通知发送到一个大基数的主题
- rrdtool - rrdtool PDP值是如何计算的?