Pregunta

La implementación actual de etiqueta sugerencia jQuery plug-in de Remy de Sharp sólo verifica si hay partidos en el comienzo de una etiqueta. Por ejemplo, escribiendo "Photoshop" no devolverá una etiqueta llamada "Adobe Photoshop".

Por defecto, la búsqueda es sensible a mayúsculas. He modificado ligeramente para recortar el exceso de espacios e ignorar caso:

for (i = 0; i < tagsToSearch.length; i++) {
    if (tagsToSearch[i].toLowerCase().indexOf(jQuery.trim(currentTag.tag.toLowerCase())) === 0) {
        matches.push(tagsToSearch[i]);
    }
}

Lo que he tratado de hacer es modificar esta de nuevo para poder volver "Adobe Photoshop" cuando el usuario escribe en "Photoshop". He intentado usar match, pero me parece que no puede conseguir que funcione cuando una variable está presente en el patrón:

for (i = 0; i < tagsToSearch.length; i++) {
    var ctag = jQuery.trim(currentTag.tag);
    if (tagsToSearch[i].match("/" + ctag + "/i")) { // this never matches, presumably because of the variable 'ctag'
        matches.push(tagsToSearch[i]);
    }
}

¿Cuál es la sintaxis correcta para realizar una búsqueda de expresiones regulares de esta manera?

¿Fue útil?

Solución

Si usted quiere hacer expresiones regulares dinámicamente en JavaScript, usted tiene que utilizar la RegExp objeto. Creo que el código se vería así (no hemos probado, no estoy seguro, pero en este idea general):

for (i = 0; i < tagsToSearch.length; i++) {
    var ctag = jQuery.trim(currentTag.tag);
    var regex = new RegExp(ctag, "i")
    if (tagsToSearch[i].match(regex)) {
        matches.push(tagsToSearch[i]);
    }
}

Otros consejos

En lugar de

"/" + ctag + "/i"

Uso

new RegExp(ctag, "i")

También puede seguir utilizando indexOf, acaba de cambiar su === 0 a> = 0:

for (i = 0; i < tagsToSearch.length; i++) {
    if (tagsToSearch[i].toLowerCase().indexOf(jQuery.trim(currentTag.tag.toLowerCase())) >= 0) {
        matches.push(tagsToSearch[i]);
    }
}

Pero, de nuevo, puedo estar equivocado.

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