除了第一个用javascript外,我将用“&”替换所有“?”。我找到了一些正则表达式,但是它们不起作用。 我有类似的东西:
home/?a=1
home/?a=1?b=2
home/?a=1?b=2?c=3
我想:
home/?a=1
home/?a=1&b=2
home/?a=1&b=2&c=3
有人知道我该怎么做? 谢谢!
答案 0 :(得分:2)
我认为正则表达式是不可能的,但是您可以拆分字符串,然后将其重新连接在一起,手动替换第一次出现的情况:
var split = 'home/?a=1?b=2'.split('?'); // [ 'home/', 'a=1', 'b=2' ]
var replaced = split[0] + '?' + split.slice(1).join('&') // 'home/?a=1&b=2'
console.log(replaced);
答案 1 :(得分:1)
您可以使用否定的character class [^?]+
从字符串的开头而不是问号进行匹配,然后匹配问号并在第一个捕获组中捕获它。在第二个捕获组中,捕获其余的字符串。
使用replace并将函数作为第二个参数传递,在该参数中,您将返回第一个捕获组,然后返回第二个捕获组,在第二个捕获组中,所有问号均被&
取代
let strings = [
"home/?a=1",
"home/?a=1?b=2",
"home/?a=1?b=2?c=3"
];
strings.forEach((str) => {
let result = str.replace(/(^[^?]+\?)(.*)/, function(match, group1, group2) {
return group1 + group2.replace(/\?/g, '&')
});
console.log(result);
});
答案 2 :(得分:0)
您可以将其分隔为“?”然后重新包装数组:
var string = "home/?a=1?b=2";
var str = string.split('?');
var new = str[0] + '?'; // text before first '?' and first '?'
for( var x = 1; x < str.length; x++ ) {
new = new + str[x];
if( x != ( str.length - 1 ) ) new = new + '&'; //to avoid place a '&' after the string
}
答案 3 :(得分:0)
您可以使用/([^\/])\?/
作为正则表达式中与?
字符之后的任何/
字符匹配的模式。
var str = str.replace(/([^\/])\?/g, "$1&");
var str = "home/?a=1\nhome/?a=1?b=2\nhome/?a=1?b=2?c=3\n".replace(/([^\/])\?/g, "$1&");
console.log(str);