需要快速的大师帮助:)得到了网址 http://www.blahblah.com/?ssct=654654654654654#games/park 我需要应用正则表达式从网址中删除?ssct = 654654654654654。 我已经替换了(/\ ?. *#,'')这个,但它摆脱了我需要的#符号。谢谢你的帮助。
答案 0 :(得分:3)
使用Zero-width positive lookahead:
replace(/\?.*(?=#)/, '');
答案 1 :(得分:3)
最简单的变体是
/\?[^#]*/
匹配文字'?'
字符,后跟除'#'
以外的任意数量的字符。
"http://www.blahblah.com/?ssct=654654654654654#games/park".replace(/\?[^#]*/, '')
===
"http://www.blahblah.com/#games/park"
正确处理URI引用始终是分层的(http
vs mailto
“不透明”)且具有查询组件的情况。
虽然有简单的正则表达式可以犯错误的方法。例如,这种方法存在问题
"http://www.blahblah.com/#games/park?duck"
第一个?
出现在片段内而不是查询中。
要防范,您确实需要正确解析URI。 RFC 3986 Appendix B包含:
以下行是用于将格式正确的URI引用分解为其组件的正则表达式。
因此,要正确处理所有分层URI,您需要执行类似
的操作var myUrl = "http://www.blahblah.com/?ssct=654654654654654#games/park";
myUrl.replace(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/, "$1$3$5$8")
这可能是一次性的过度杀戮,但另一种选择是使用JS库来提供正确的URI处理原语,如Closure's Uri module
var urlWithoutQuery =
new goog.Uri("http://www.blahblah.com/?ssct=654654654654654#games/park")
.setQuery('')
.toString()
答案 2 :(得分:0)
你能用'#'代替空字符串吗?
replace(/\?.*#/, '#')
答案 3 :(得分:-1)
正则表达式不是最理想的解决方案。在有效的URI格式中,只有一个“?”字符。所以最好的解决方案是:
var a = location.href;
a = a.substring(0, a.indexOf("?"));