我需要帮助让Regex表达正确2

时间:2013-01-30 17:24:17

标签: javascript regex

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

4 个答案:

答案 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("?"));