2

Google Plus で使用するブックマークレットを作成しています。私は正規表現に少し慣れていますが、次のテストはほとんど機能します。

/\/([0-9]{10,30})|(\+[^\/]{2,30})\//.exec(window.location.pathname);

OR の前の最初の部分は、古いスタイルのユーザー ID 番号を抽出するために正常に機能しますが、新しいバニティ スタイルの ID を抽出する 2 番目の部分は、同じ位置に「未定義」を含む配列を返します。

古いスタイルの URL は次のようになります。

https://plus.google.com/u/0/113917445082638587047/posts
https://plus.google.com/113917445082638587047/posts

一般的なバニティ URL は次のようになります。

https://plus.google.com/u/0/+MarkTraphagen/posts
https://plus.google.com/+MarkTraphagen/posts

バニティ URL の場合、私の正規表現は次のように返します。

["+MarkTraphagen/", undefined, "+MarkTraphagen"]

「未定義」はどこから来たのですか?どうすればそれを取り除くことができますか?


注: 上記のストリングの長さ (10 から 30 および 2 から 30) は、おおよそトイレ水の許容 pH レベルに基づいているため、それらを使用する前に考慮してください。

4

2 に答える 2

5

キャプチャを移動して、最初または 2 番目のフォームを取得します。

/\/([0-9]{10,30}|\+[^\/]{2,30})\//.exec(window.location.pathname);

その場合、フォーム #1 またはフォーム #2 のいずれかの値が 1 つだけ取得されます。

未定義は、2 つのキャプチャがあり、最初のキャプチャが存在しなかったために発生しました。

于 2012-09-10T18:47:24.993 に答える
1

これが、問題の解決策になる可能性のある正規表現パターンです。トイレの水の pH レベルは正規表現に影響を与えるべきではありません。これは一般的なルールです。

/\/(\d{4,}|\+\w+?)\//g.exec(window.location.pathname);

結果はこちらでご覧いただけます

4正規表現の数字は、好きなものに置き換えることができることに注意してください。この数値は、キャプチャに必要な最小桁数です。Google の ID の形式がよくわからないので10、たとえば、ID が 10 桁未満ではないことが確実な場合は、その番号を に変更することをお勧めします。

パターンの説明は次のとおりです。

// /(\d{4,}|\+\w+?)/
// 
// Match the character “/” literally «/»
// Match the regular expression below and capture its match into backreference number 1 «(\d{4,}|\+\w+?)»
//    Match either the regular expression below (attempting the next alternative only if this one fails) «\d{4,}»
//       Match a single digit 0..9 «\d{4,}»
//          Between 4 and unlimited times, as many times as possible, giving back as needed (greedy) «{4,}»
//    Or match regular expression number 2 below (the entire group fails if this one fails to match) «\+\w+?»
//       Match the character “+” literally «\+»
//       Match a single character that is a “word character” (letters, digits, and underscores) «\w+?»
//          Between one and unlimited times, as few times as possible, expanding as needed (lazy) «+?»
// Match the character “/” literally «/»
于 2012-09-10T20:16:20.763 に答える