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"

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()
于 2013-01-30T17:33:06.293 に答える
0

空の文字列の代わりに「#」に置き換えることはできますか? replace(/\?.*#/, '#')

于 2013-01-30T17:26:04.160 に答える
-1

正規表現は、最も理想的なソリューションではありません。有効な URI 形式では、「?」は 1 つだけです。キャラクター。したがって、最善の解決策は次のとおりです。

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