在URL查询字符串中插入参数(如果尚未使用纯正则表达式替换)



如果我的ur字符串中不存在&show_pinned_search=1?show_pinned_search=1,我想添加一个参数。如果参数show_pinned_search=1还不存在,我可以使用类似(?!show_pinned_search=1)否定外观方法添加它,但很难决定前面的字符是&?。测试演示:https://regex101.com/r/aNccK6/1

示例输入:

https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5&show_pinned_search=1
http://www.example.com/property/hyat-doral/HA-4509801?show_pinned_search=1
https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5
http://www.example.com/property/hyat-doral/HA-4509801
http://www.example.com/property/hyat-doral/HA-4509801?show_pinned_search=1
https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5

预期输出:

https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5&show_pinned_search=1
http://www.example.com/property/hyat-doral/HA-4509801?show_pinned_search=1
https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5&show_pinned_search=1
http://www.example.com/property/hyat-doral/HA-4509801?show_pinned_search=1
http://www.example.com/property/hyat-doral/HA-4509801?show_pinned_search=1
https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5&show_pinned_search=1

此regexp检查是否必须插入show_pinned_search=1条目:

^([^?]+)(?:??)(?!(?:.*)&?show_pinned_search=1(?:&.*)?$)(.*)$

循序渐进:

  • ([^?]+)(?:??):将url的第一部分与问号?匹配(如果有的话(。仅捕获可能的问号之前的部分(组id$1(
  • (?!(?:.*)&?show_pinned_search=1(?:&.*)?$):向前看,确保url的前导部分没有出现show_pinned_search=1
  • (.*):检索前导部分(当然它没有出现show_pinned_search=1(并捕获它(组id$2(

然后进行此替换:

$1?show_pinned_search=1&$2

这里的诀窍是在问号之后插入show_pinned_search=1,这样您就不必担心之前是否有问号或与号&

这里的一个小缺点是,如果url结尾没有参数前导部分或以问号结尾,则可以在字符串中获得前导&符号。不过,这没什么大不了的。

Regexp101.com小提琴。

这是的一种方法

这里的想法是首先检查测试字符串是否包括我们正在测试的模式。如果它改变了,那么我们什么都不改变,如果不改变,那么我们搜索&?的最后一个索引。无论哪个索引较高,我们都会将该特殊字符与show_pinned_search=1一起添加

let arr = [`https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5&show_pinned_search=1`,
`http://www.example.com/property/hyat-doral/HA-4509801?show_pinned_search=1`,
`https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5`,
`http://www.example.com/property/hyat-doral/HA-4509801`,
`http://www.example.com/property/hyat-doral/HA-4509801?show_pinned_search=1`,
`https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5`,
];
let op = arr.map(e=>{
let temp = e.match(/(?|&)show_pinned_search=1/); 
let ampIndex = e.lastIndexOf('&');
let quesIndex = e.lastIndexOf('?');
if(temp) return e;
else return ampIndex > quesIndex ? e+'&show_pinned_search=1' : e+`?show_pinned_search=1`
})
console.log(op);

相关内容

  • 没有找到相关文章

最新更新