[英]RegEx matching for G+ Profile URL
我一直在嘗試僅匹配Google+帳戶的URI的用戶ID或虛榮部分。 我正在使用GAS(Google Script Engine),我已經加載了XRegExp以幫助匹配Unicode字符。
到目前為止我有這個: ((https?://)?(plus\\.)?google\\.com/)?(.*/)?([a-zA-Z0-9._]*)($|\\?.*)
你可以看到正則表達式測試(外部網站)仍然不匹配正確的部分。
我已經嘗試在[a-zA-Z0-9._]
使用\\p{L}
,但沒有運氣。 此外,當匹配時,我最終在配置文件名稱的末尾添加了一個額外的正斜杠。
更新#1:我正在嘗試修復從Google表單復制的電子表格中的一些G + URL。 這些鏈接並非完全相同,最簡單的個人資料鏈接是“ https://plus.google.com/”+用戶ID或虛榮名稱。
更新2:到目前為止,我有([+]\\w+|[0-9]{21})(?:\\/)?(?:\\w+)?$
與用途@demrks的簡化版本@ guest271314的響應。 但是,有兩個問題:
1)Google虛榮網址中可以包含unicode。 示例: https://plus.google.com/u/0/+JoseManuelGarcía_ertatto
: https://plus.google.com/u/0/+JoseManuelGarcía_ertatto
失敗。 我曾試圖使用\\ p {L}但似乎無法正確使用它。
2)雖然正則表達式測試適用於此站點,但GAS似乎並不喜歡它。 =(
更新#3:似乎GAS只是討厭使用\\w
所以我不得不擴展它。 所以我到目前為止:
/([+][A-Za-z0-9-_]+|[0-9]{21})(?:\/)?(?:[A-Za-z0-9-_]+)?$/
這甚至與URL末尾的“/ about”或“/ posts”相匹配。 但是仍然不符合UNICODE。 =(我還在努力。
更新#4:所以這似乎有效: /([+][\\\\w-_\\\\p{L}]+|[\\\\d]{21})(?:\\/)?(?:[\\\\w-_]+)?$/
看起來我需要在角色類的一側做雙反斜杠。 所以這似乎到目前為止工作。 不知道是否有更短的方法來使用它。
編輯,更新
試試(v4)
document.URL.match(/\++\w+.*|\d+\d|\/+\w+$/).toString()
.replace(/\/+|posts|about|photos|videos|plusones|reviews/g, "")
例如,
var urls = ["https://plus.google.com/+google/posts"
, "https://plus.google.com/+google/about"
, "https://plus.google.com/+google/photos"
, "https://plus.google.com/+google/videos"
, "https://plus.google.com/+google/plusones"
, "https://plus.google.com/+google/reviews"
, "https://plus.google.com/communities/104645458102703754878"
, "https://plus.google.com/u/0/LONGIDHERE"
, "https://plus.google.com/u/0/+JoseManuelGarcía_ertatto"];
var _urls = [];
urls.forEach(function(item) {
_urls.push(item.match(/\++\w+.*|\d+\d|\/+\w+$/).toString()
.replace(/\/+|posts|about|photos|videos|plusones|reviews/g, ""));
});
_urls.forEach(function(id) {
var _id = document.createElement("div");
_id.innerHTML = id;
document.body.appendChild(_id)
});
此解決方案應匹配ID和用戶名(使用unicode字符):
/\+[^/]+|\d{21}/
說明:作為\\w
的替代(它與unicode字符不匹配)我使用了一個否定組[^/]
(匹配“/”之外的任何東西)。
遵循可能的解決方案:
(?:\+)(\w+)|(?:\/)(\w+)$
說明:
第一種選擇: (?:\\+)(\\w+)
(?:\\+)
非捕獲組: \\+
匹配字符+
字面。 捕獲組(\\w+)
: \\w+
匹配任何單詞字符[a-zA-Z0-9_]。 量詞:在一次和無限次之間。
第二種選擇: (?:\\/)(\\w+)$
。 (?:\\/)
非捕獲組。 \\/
匹配字符/
字面。 捕獲組(\\w+)
。 \\w+
匹配任何單詞字符[a-zA-Z0-9_]
。 量詞:在一次和無限次之間。 $
斷言字符串末尾的位置。
希望它有用!
所以這似乎有效: /([+][\\\\w-_\\\\p{L}]+|[\\\\d]{21})(?:\\/)?(?:[\\\\w-_]+)?$/
看起來我需要在角色類的一側做雙反斜杠。 所以這似乎到目前為止工作。 不知道是否有更短的方法來使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.