簡體   English   中英

RegEx匹配G +配置文件URL

[英]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_ertattohttps://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)
});

jsfiddle http://jsfiddle.net/guest271314/o4kvftwh/

此解決方案應匹配ID和用戶名(使用unicode字符):

/\+[^/]+|\d{21}/

http://regexr.com/39ds0

說明:作為\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM