迅速なグルの助けが必要です:) URL http://www.blahblah.com/?ssct=654654654654654#games/park を取得しました URL から ?ssct=654654654654654 を削除するために正規表現を適用する必要があります。replace(/\?.*#/, '') これを配置しましたが、必要な # 記号が取り除かれます。ご協力ありがとう御座います。
4 に答える
ゼロ幅の正の先読みを使用:
replace(/\?.*(?=#)/, '');
機能する最も単純なバリエーションは
/\?[^#]*/
'?'
これは、リテラル文字の後に 以外の任意の数の文字が続くものと一致し'#'
ます。
"http://www.blahblah.com/?ssct=654654654654654#games/park".replace(/\?[^#]*/, '')
===
"http://www.blahblah.com/#games/park"
http
これは、URI 参照が常に階層的 ( vsmailto
これは「不透明」) であり、クエリ コンポーネントを持つ場合を正しく処理します。
警告
ただし、単純な正規表現で間違いを犯す方法があります。たとえば、このアプローチには問題があります。
"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")
これはおそらく1回限りのやり過ぎですが、別の代替手段は、ClosureのUriモジュールのような適切なURI処理プリミティブを提供するJSライブラリを使用することです
var urlWithoutQuery =
new goog.Uri("http://www.blahblah.com/?ssct=654654654654654#games/park")
.setQuery('')
.toString()
空の文字列の代わりに「#」に置き換えることはできますか?
replace(/\?.*#/, '#')
正規表現は、最も理想的なソリューションではありません。有効な URI 形式では、「?」は 1 つだけです。キャラクター。したがって、最善の解決策は次のとおりです。
var a = location.href;
a = a.substring(0, a.indexOf("?"));