私はmatch
この形式のURLから「12345」にしようとしています:
http://domain.com/folder/title_of_this_12345
これまでに試しました:
var pattern = "_([0-9]+)^";
alert(window.location.pathname.match(pattern));
しかし、私はnullで返されますか?
目的は、文字列の最後から最初のアンダースコアまでの数字を正規表現することですか?
私はmatch
この形式のURLから「12345」にしようとしています:
http://domain.com/folder/title_of_this_12345
これまでに試しました:
var pattern = "_([0-9]+)^";
alert(window.location.pathname.match(pattern));
しかし、私はnullで返されますか?
目的は、文字列の最後から最初のアンダースコアまでの数字を正規表現することですか?
をに置き換える^
と$
、メソッドが機能します。^
文字列の先頭に一致し、文字列の末尾に一致します(ここでは関係ありませんが、改行文字が存在する場合$
の動作に関するドキュメントを確認してください)。$
非正規表現の解決策は可能ですが、リンクに番号が含まれる場合と含まれない場合は、最後のトークンが番号であるか、解析の結果がNaNであるかを確認する必要があります。したがって、正規表現はおそらくここでの適切な解決策です。
明確にするために、一致した番号自体は、返された配列のインデックス1で取得されます。
alert(str.match(/_(\d+)$/)[1]);
試す
var path = window.location.pathname;
var num = parseInt(path.substr(path.lastIndexOf('_') + 1, 10));
正規表現を含まない代替手段として。
実際、それを行うためのはるかに簡潔な非正規表現の方法については、質問に関するGGGのコメントを参照してください。