需要一个快速的大师帮助:) 得到了 url http://www.blahblah.com/?ssct=654654654654654#games/park 我需要应用正则表达式从 url 中删除 ?ssct=654654654654654。我有 replace(/\?.*#/, '') 这个地方,但它摆脱了我需要的 # 符号。谢谢你的帮助。
问问题
52 次
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 引用始终是分层的(http
与mailto
“不透明”)并具有查询组件的情况。
警告
不过,使用简单的正则表达式是有可能出错的。例如,这种方法存在以下问题
"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 回答