我有一个像获取页面这样的链
file.php?Valor1=one&Valor2=two&Valor3=three
我希望能够删除只有具有值的get请求参数。例如,remove two
的结果
file.php?Valor1=one&Valor3=three
尝试
stringvalue.replace(new RegExp(value+"[(&||\s)]"),'');
答案 0 :(得分:5)
这是一个与&符号(&
)匹配的正则表达式,后跟一系列不等于符号的字符([^=]+
),等号(=
),字面值two
以及下一个&符号或行尾(&|$)
:
/&[^=]+=two(&|$)/
let input = 'file.php?&Valor1=one&Valor2=two&Valor3=three';
let output = input.replace(/&[^=]+=two/, '');
console.log(output);
如果您要从变量中删除值:
let two = 'two';
let re = RegExp('&[^=]+=' + two + '(&|$)');
let input = 'file.php?&Valor1=one&Valor2=two&Valor3=three';
let output = input.replace(re, '');
console.log(output);
在这种情况下,您需要确保您的变量值不包含任何在正则表达式中具有特殊含义的字符。如果是这种情况,你需要正确地逃避它们。
<强>更新强>
要在更新的问题中解决输入字符串(在第一个参数之前没有符号):
let one = 'one';
let re = RegExp('([?&])[^=]+=' + one + '(&?|$)');
let input = 'file.php?Valor1=one&Valor2=two&Valor3=three';
let output = input.replace(re, '$1');
console.log(output);
答案 1 :(得分:1)
您可以使用RegExp
构造函数,RegExp
,模板文字&[a-zA-Z]+\\d+=(?=${remove})${remove})
来匹配"&"
,后跟“az”,“AZ”,然后是一个或多个数字按""
,然后匹配值以传递给.replace()
var str = "file.php?&Valor1=one&Valor2=two&Valor3=three";
var re = function(not) {
return new RegExp(`&[a-zA-Z]+\\d+=(?=${not})${not}`)
}
var remove = "two";
var res = str.replace(re(remove), "");
console.log(res);
var remove = "one";
var res = str.replace(re(remove), "");
console.log(res);
var remove = "three";
var res = str.replace(re(remove), "");
console.log(res);
答案 2 :(得分:0)
我认为更清洁的解决方案是使用URLSearchParams api
var paramsString = "Valor1=one&Valor2=two&Valor3=three"
var searchParams = new URLSearchParams(paramsString);
//Iterate the search parameters.
//Each element will be [key, value]
for (let p of searchParams) {
if (p[1] == "two") {
searchParams.delete(p[0]);
}
}
console.log(searchParams.toString()); //Valor1=one&Valor3=three