0

如果有一个 url 我需要删除它的时间戳部分。我将如何在 javascript 中做到这一点。

正则表达式或字符串操作哪个是首选?

这是网址,

"%7B%22def%22%3A%22f%3Ar%22%2C%22a%22%3A%7B%22v%22%3A%7B%22r%22%3A%22005x0000001R9JRAA0%22%7D%7D%2C%22t%22%3A1378328815840%7D"
                                                                                                      ^

t%22%3A1378328815840%7D,这是我需要从 url 中删除的,它是时间戳。

4

1 回答 1

3

由于这对 JSON 字符串进行编码

{"def":"f:r","a":{"v":{"r":"005x0000001R9JRAA0"}},"t":1378328815840}

你可以做

function removeTimestamp(uriStr) {
  // Decode the JSON encoded in the URI.
  var jsonObj = JSON.parse(decodeURIComponent(uriStr));
  // Remove the "t" property.
  delete jsonObj['t'];
  // Re-encode as a URI-encoded JSON string
  return encodeURIComponent(JSON.stringify(jsonObj));
}

在您的输入字符串上,

var s = "%7B%22def%22%3A%22f%3Ar%22%2C%22a%22%3A%7B%22v%22%3A%7B%22r%22%3A%22005x0000001R9JRAA0%22%7D%7D%2C%22t%22%3A1378328815840%7D"

var sWithoutTimestamp = removeTimestamp(s);

alert(sWithoutTimestamp);

产生下面的第一行。我在时间戳部分放了一个空白,以便您可以轻松地将其与原始部分进行比较。

Modified: %7B%22def%22%3A%22f%3Ar%22%2C%22a%22%3A%7B%22v%22%3A%7B%22r%22%3A%22005x0000001R9JRAA0%22%7D%7D                          %7D
Original: %7B%22def%22%3A%22f%3Ar%22%2C%22a%22%3A%7B%22v%22%3A%7B%22r%22%3A%22005x0000001R9JRAA0%22%7D%7D%2C%22t%22%3A1378328815840%7D

JavaScript 不指定键迭代顺序,并且JSON.stringify的输出取决于键迭代顺序,因此在某些解释器上,您可能会看到属性的重新排序,但它不应该影响输出的含义。


如果 URI 不是 UTF-8 编码并且包含非 ASCII 代码点,则此代码也可能会做一些奇怪的事情。

于 2013-09-04T21:17:15.170 回答