试图使用Javascript正则表达式获取&&引用;带分隔符的文本,无论是否为';最后一个值是多少

试图使用Javascript正则表达式获取&&引用;带分隔符的文本,无论是否为';最后一个值是多少,javascript,regex,Javascript,Regex,我的文本与此类似: action=addItem&siteId=4&lang_locale=en_US&country=US&catalogId=1&productId=417689&displaySize=7&skuSize=2194171&qty=1&pil=7&psh=had+AIRJRnjbp7+rGivIKg00 我想替换“psh”的值。它有时可能不是最后一个值(后面可能跟有&something=else

我的文本与此类似:

action=addItem&siteId=4&lang_locale=en_US&country=US&catalogId=1&productId=417689&displaySize=7&skuSize=2194171&qty=1&pil=7&psh=had+AIRJRnjbp7+rGivIKg00
我想替换“psh”的值。它有时可能不是最后一个值(后面可能跟有
&something=else

我已经尝试了以下几行代码:

  • var text=text.replace(/&psh=.*(=&|$)/,“&psh=“+data.psh”)
  • var text=text.replace(/&psh=.*(=[&$]+)/,“&psh=“+data.psh”)
  • var text=text.replace(/(?:&psh=)(.*)(?=[&$]+)/,data.psh)
  • 它们都不适用于这两种情况。用于检查正则表达式。

    这应该可以:

    var text = text.replace(/&psh=[^&]*/, "&psh=" + data.psh);
    
    [^&]*
    匹配由除
    &
    以外的任何字符组成的任何长度的字符串,因此匹配将持续到字符串的结尾或下一个
    &
    (但不包括)为止,以先到者为准。

    这应该有效:

    var text = text.replace(/&psh=[^&]*/, "&psh=" + data.psh);
    

    [^&]*
    匹配由除
    &
    以外的任何字符组成的任何长度的字符串,因此匹配将一直持续到字符串的结尾或下一个
    &
    (但不包括),以先到者为准。

    蒂姆的答案可能有效,但我担心这不是最好的答案。作为示例,您给出的字符串看起来很像url。如果是,这意味着有时也会有一个英镑符号(#)。为了补偿这一点,您实际上需要修改代码,使其如下所示:

    var text = text.replace(/&psh=[^&#]*/, "&psh=" + data.psh);
    

    请注意添加的#是为了不被url中的锚标记绊倒。

    蒂姆的答案可能有效,但我担心这不是最好的答案。作为示例,您给出的字符串看起来很像url。如果是,这意味着有时也会有一个英镑符号(#)。为了补偿这一点,您实际上需要修改代码,使其如下所示:

    var text = text.replace(/&psh=[^&#]*/, "&psh=" + data.psh);
    

    请注意#,它是为了不被url中的锚标记绊倒而添加的。

    效果很好。我不想寻找所有的东西(
    *
    ),只是那些不是符号的东西,这是有道理的。谢谢这很有效。我不想寻找所有的东西(
    *
    ),只是那些不是符号的东西,这是有道理的。谢谢可以帮助他人:可以帮助他人: