0

location.href の # から非アルファベットまでのすべてのアルファベットを取得する正規表現の書き方。

例 1: ソース文字列 1 : www.example.com#blue?something=x
私が期待するもの: 青

例 2: ソース文字列 2 : www.example.com#blue&something=x
私が期待するもの: 青

例 3: ソース文字列 3: www.example.com#blue
私が期待するもの: blue

例 4: ソース文字列 4 : www.example.com#?something=x
私が期待するもの: ""

例 5: ソース文字列 5 : www.example.com
私が期待するもの: ""

4

3 に答える 3

2

賢明な言語では、次のように簡単です/(?<=#)[a-z]+/

残念ながら、JS 正規表現は後読みアサーションをサポートしていません。

var match = (input.match(/#[a-z]+/) || [""])[0].substr(1);
于 2013-03-02T01:17:21.643 に答える
0

URI構文は次のとおりです。

scheme ":" hier-part [ "?" query ] [ "#" fragment ]

(詳細については、 RFC 3986を参照してください)

したがって、この例#blue?something=xにはフラグメントがあり、クエリ文字列はありません。ここで、適切に形成された場合:

www.example.com?something=x#blue

あなたは?somethingクエリとして、そして#blueフラグメントとして持っています。テストする:

var a = document.createElement("a");
a.href = "http://www.example.com#blue?something=x"

console.log(a.hash, a.search);

a.href = "http://www.example.com?something=x#blue"

console.log(a.hash, a.search);

したがって、最初に、投稿したURIが意図したものであるかどうかを確認する必要があります。これは、それらが整形式ではないように見えるためです。

例が正しければ、次のようなものを使用できます。

function getFragment(s) {
   var v = s.match(/#([^?&]+)/);
   return v ? v[1] : "";
}

または:

function getFragment(s) {
    return [].concat(s.match(/#([^?&]+)/))[1] || "";
}

しかし、私の意見では読みにくいです。

[^?&]PSアルファベットだけに本当に興味がある場合は、に置き換えることができます[A-Za-z]。ただし、この方法では、 www.example.com#blue12&something=xどちらのようにもURLを一致させることはできませんwww.example.com#blue_and_green&something=x。その意図があれば、交換することができます。それ以外の場合、keepはまたはで[^?&]はないすべての文字と一致するため、より一般的になります。?&

于 2013-03-02T01:33:09.167 に答える
0

これらの URL は ... 特に有効ではありませんが ( ? の?#)、有効な場合は、URL から Location オブジェクトを作成しlocationObject.hash#. 文字列として:

str.match(/#([a-z]+)/i)[1];
于 2013-03-02T01:16:37.060 に答える