¿Cómo se pueden encontrar todas las direcciones IP en un bloque de texto seleccionado con un bookmarklet de JavaScript?

StackOverflow https://stackoverflow.com/questions/72921

Pregunta

Recién estoy empezando a aprender JavaScript, por lo que no tengo las habilidades para resolver lo que supongo que es un problema trivial.

Estoy trabajando con un blog de Wordpress que sirve como preguntas frecuentes para nuestra comunidad y estoy tratando de reunir algunas herramientas para facilitar la gestión de los comentarios. Herramientas Greasemonkey de Internet Duct Tape, como Comment Ninja, son útiles para la mayor parte, pero quiero poder obtener una lista de todas las direcciones IP de las que recibimos comentarios para poder realizar un seguimiento de las tendencias, etc.

Solo quiero poder seleccionar un montón de texto en la página de comentarios y hacer clic en un marcador (http://bookmarklets.com) en Firefox que muestra una ventana que enumera todas las direcciones IP encontradas en la selección.

Actualizar:

Como que combiné las respuestas de Levik y jacob para llegar a esto:

javascript:ipAddresses=document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g).join("<br>");newWindow=window.open('', 'IP Addresses in Selection', 'innerWidth=200,innerHeight=300,scrollbars');newWindow.document.write(ipAddresses)

La diferencia es que en lugar de una alerta mensaje, como en la respuesta de levik, abro una nueva ventana similar a la respuesta de Jacob.El alerta no proporciona barras de desplazamiento, lo que puede ser un problema para páginas con muchas direcciones IP.Sin embargo, necesitaba que la lista fuera vertical, a diferencia de la solución de Jacob, así que usé la sugerencia de Levik para hacer una
para la unión en lugar de levik orte.

Gracias por toda la ayuda, chicos.

¿Fue útil?

Solución

En Firefox, podrías hacer algo como esto:

javascript:alert(
  document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g)
  .join("\n"))

Cómo funciona esto:

  • Obtiene el texto de selección del navegador ("document.getSelection()" en FF, en IE sería "document.selection.createRange().text")
  • Aplica una expresión regular para marcar las direcciones IP (como lo sugiere Muerr); esto da como resultado una serie de cadenas.
  • Une esta matriz en una cadena separada por caracteres de retorno
  • Alerta esa cadena

La forma de realizar la selección es un poco diferente en IE, pero el principio es el mismo.Para que sea compatible con varios navegadores, deberá verificar qué método está disponible.También podrías hacer una salida más complicada (como crear un DIV flotante e insertar todas las IP en él).

Otros consejos

Utilice una expresión regular para detectar la dirección IP.Un par de ejemplos:

/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/
/^([1-9][0-9]{0,2})+\.([1-9][0-9]{0,2})+\.([1-9][0-9]{0,2})+\.([1-9][0-9]{0,2})+$/

Como marcador

javascript:document.write(document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g))

Simplemente cree un nuevo marcador y pegue ese javascript en

Cómo hacerlo en Ubiquity

CmdUtils.CreateCommand({
    name: "findip",
    preview: function( pblock ) {
        var msg = 'IP Addresses Found<br/><br/> ';
        ips = CmdUtils.getHtmlSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g);
        if(ips){
            msg += ips.join("<br/>\n");
        }else{
            msg += 'None';
        }
        pblock.innerHTML = msg;
    },

    execute: function() {
        ips = CmdUtils.getHtmlSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g);
        if(ips){
            CmdUtils.setSelection(ips.join("<br/>\n"));
        }
    }
})

Aquí es un buen artículo sobre cómo obtener la dirección IP de sus visitantes.Puede mostrar esto además de su comentario si lo desea o incluirlo como una etiqueta o campo en su página para poder consultarlo más adelante.

Echa un vistazo a marcador rot13 para ver un ejemplo de cómo seleccionar texto y realizar una acción (en este caso, sustitución) cuando se hace clic en el bookmarklet.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top