1

我的文字看起来与此类似:

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)。

我试过做这些代码行:

  1. var text = text.replace(/&psh=.*(?=&|$)/, "&psh=" + data.psh);
  2. var text = text.replace(/&psh=.*(?=[&|$]+)/, "&psh=" + data.psh);
  3. var text = text.replace(/(?:&psh=)(.*)(?=[&|$]+)/, data.psh);

它们都不适用于这两种情况。使用此站点检查正则表达式。

4

2 回答 2

4

这应该有效:

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

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

于 2012-09-08T20:42:39.833 回答
0

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

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

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

于 2012-09-08T22:27:37.563 回答