用“&”代替所有“?”,但首先

时间:2018-10-06 22:36:38

标签: javascript regex replace

除了第一个用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

有人知道我该怎么做? 谢谢!

4 个答案:

答案 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);