Estoy buscando una expresión regular universal que extraiga el nombre de usuario de twitter de una url.Regex - Extracto TwitterUsername de la URL
Muestra direcciones URL
http://www.twitter.com/#!/donttrythis
http://twitter.com/KimKardashian
Estoy buscando una expresión regular universal que extraiga el nombre de usuario de twitter de una url.Regex - Extracto TwitterUsername de la URL
Muestra direcciones URL
http://www.twitter.com/#!/donttrythis
http://twitter.com/KimKardashian
Prueba esto:
^https?://(www\.)?twitter\.com/(#!/)?(?<name>[^/]+)(/\w+)*$
El grupo "nombre" sub contendrá el nombre de usuario de Twitter.
Esta expresión regular asume que cada URL está en su propia línea.
Para utilizarlo en JS, utilice esto:
^https?://(www\.)?twitter\.com/(#!/)?([^/]+)(/\w+)*$
El resultado está en el subgrupo de $ 3.
Esta expresión regular coincide con las cuatro URL determinadas. El nombre de usuario está presente en $ 1
m[twitter\.com/+(?:#!/+)?(\w+)]
Utilice esta opción para comprobar
perl -le '$_="<url>"; m[twitter\.com/+(?:#!/+)?(\w+)]; print $1'
Esta funciona para mí (en PHP): /twitter\.com(?:\/\#!)?\/(\w+)/i
hay un par más casos de prueba para hacer una expresión regular universal.
https
URLs son también válidostwitter.com/@username
también van al perfil de usuarioEsto debería hacer el truco en PHP
preg_match("|https?://(www\.)?twitter\.com/(#!/)[email protected]?([^/]*)|", $twitterUrl, $matches);
Si preg_match
devuelve 1 (un partido) entonces el resultado está en $matches[3]
Gracias. Su funcionamiento –
Gracias a trabajar perfecto excepto que hay como 3 índices vacíos para limpiar para obtener '$ matches [1]' so '$ matches = array_values (array_filter ($ matches));' –
esta expresión regular funciona bien en jQuery
$('#inputTwitter').blur(function() {
var twitterUserName = $(this).val();
$(this).val(twitterUserName.match(/https?:\/\/(www\.)?twitter\.com\/(#!\/)[email protected]?([^\/]*)/)[3])
});
respuesta de Lombo es mi favorito, pero será glom cualquier cadena de consulta con el resultado:
http://www.twitter.com/#!/donttrythis?source=internet
dará lugar a un nombre de usuario de "donttrythis ?fuente = Internet"
Me modificarlo para que sea:
preg_match("|https?://(www\.)?twitter\.com/(#!/)[email protected]?([^/\?]*)|", $twitterUrl, $matches);
Adición \?
a la clase de caracteres excluidos después de que el nombre de usuario asegura se excluye la cadena de consulta
Ésta se basa en Lombo de. respuesta, funciona sin http (s) también es menos hambre (no mantener espacios después del nombre de usuario) y devuelve el resultado en la primera
Compruebe en acción:. https://regex101.com/r/xI2vF3/3
Para JS:
(?:https?:\/\/)?(?:www\.)?twitter\.com\/(?:#!\/)[email protected]?([^\/\?\s]*)
mejor respuesta, creo –
me encontré con la respuesta de Lombo funcionar mejor excepto que no funcionaría si la URL era www.twitter.com/example. Lo siguiente me funciona en www también.
$dirty_twitter = array('https://twitter.com/', 'http://twitter.com/', 'www.twitter.com/', 'https://www.twitter.com/', 'http://www.twitter.com/', 'twitter.com/');
$clean_twitter = str_replace($dirty_twitter, '', $clean_twitter);
¿En qué idioma es eso? JS no es compatible con estos grupos nombrados? – Rudie
Es C#. Consulte la actualización para ver un ejemplo que debería funcionar en JS. –
Para JS con barras y escapó: '/^https?:\/\/(www\.)?twitter\.com\/(#!\/)?([^\/]+)(\/\w+) * $/' –