0

需要一个快速的大师帮助:) 得到了 url http://www.blahblah.com/?ssct=654654654654654#games/park 我需要应用正则表达式从 url 中删除 ?ssct=654654654654654。我有 replace(/\?.*#/, '') 这个地方,但它摆脱了我需要的 # 符号。谢谢你的帮助。

4

4 回答 4

3

使用零宽度正前瞻

replace(/\?.*(?=#)/, '');
于 2013-01-30T17:31:33.037 回答
3

最简单的变化是

/\?[^#]*/

它匹配一个文字'?'字符,后跟除 . 之外的任意数量的字符'#'

"http://www.blahblah.com/?ssct=654654654654654#games/park".replace(/\?[^#]*/, '')

===

"http://www.blahblah.com/#games/park"

这可以正确处理 URI 引用始终是分层的(httpmailto“不透明”)并具有查询组件的情况。


警告

不过,使用简单的正则表达式是有可能出错的。例如,这种方法存在以下问题

"http://www.blahblah.com/#games/park?duck"

其中第一个?出现在片段内而不是在查询中。

为了防弹,您确实需要正确解析 URI。 RFC 3986 附录 B包含:

以下行是将格式良好的 URI 引用分解为其组件的正则表达式。

因此,要对所有分层 URI 正确,您需要执行类似的操作

var myUrl = "http://www.blahblah.com/?ssct=654654654654654#games/park";
myUrl.replace(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/, "$1$3$5$8")

这可能是一次性的,但另一种选择是使用提供适当 URI 处理原语的 JS 库,如Closure 的 Uri 模块

var urlWithoutQuery =
   new goog.Uri("http://www.blahblah.com/?ssct=654654654654654#games/park")
   .setQuery('')
   .toString()
于 2013-01-30T17:33:06.293 回答
0

你可以用'#'代替空字符串吗? replace(/\?.*#/, '#')

于 2013-01-30T17:26:04.160 回答
-1

正则表达式不是最理想的解决方案。在有效的 URI 格式中,只有一个“?” 特点。所以最好的解决方案是:

var a = location.href;
a = a.substring(0, a.indexOf("?"));
于 2013-01-30T18:30:01.870 回答