¿Hay alguna manera de recuperar las posiciones de caracteres (iniciales) dentro de una cadena de los resultados de una coincidencia de expresiones regulares () en Javascript?
javascript
regex
match
string-matching
stagas
fuente
fuente
re
como variable y agregar elg
modificador son cruciales! De lo contrario, obtendrá un bucle sin fin.undefined
. jsfiddle.net/6uwn1vof/2 que no es un ejemplo de búsqueda como el tuyo.g
bandera y funcionará. Dado quematch
es una función de la cadena, no la expresión regular, no puede ser con estadoexec
, por lo que solo la trata comoexec
(es decir, tiene una propiedad de índice) si no está buscando una coincidencia global ... porque entonces la condición de estado no importa .Esto es lo que se me ocurrió:
fuente
match.index + match[0].length
También funciona para la posición final.match.index + match[0].length - 1
?.slice()
y.substring()
. El final inclusivo sería 1 menos como tú dices. (Tenga cuidado de que inclusivo generalmente signifique el índice del último personaje dentro del partido, a menos que sea un partido vacío donde es 1 antes del partido y podría estar completamente-1
fuera de la cadena para el partido vacío al inicio ...)De los documentos de developer.mozilla.org sobre el
.match()
método String :Cuando se trata de una expresión regular no global (es decir, sin
g
marca en su expresión regular), el valor devuelto por.match()
tiene unaindex
propiedad ... todo lo que tiene que hacer es acceder a ella.Aquí hay un ejemplo que muestra que también funciona:
He probado con éxito todo esto desde IE5.
fuente
Puedes usar el
search
método delString
objeto. Esto solo funcionará para el primer partido, pero de lo contrario hará lo que describas. Por ejemplo:fuente
Aquí hay una característica genial que descubrí recientemente, probé esto en la consola y parece funcionar:
Que volvió: "borde 6 inferior 13 izquierda 18 radio"
Así que esto parece ser lo que estás buscando.
fuente
arguments
esa es la posición. No "el segundo argumento". Los argumentos de la función son "coincidencia completa, grupo1, grupo2, ...., índice de coincidencia, cadena completa comparada con"En los navegadores modernos, puede lograr esto con string.matchAll () .
El beneficio de este enfoque vs
RegExp.exec()
es que no se basa en que la expresión regular sea con estado, como en la respuesta de @ Gumbo .fuente
Este miembro fn devuelve una matriz de posiciones basadas en 0, si las hay, de la palabra de entrada dentro del objeto String
Ahora intenta
También puede ingresar expresiones regulares:
Aquí se obtiene el índice de posición del término lineal.
fuente
fuente
str.indexOf
aquí solo se encuentra la siguiente aparición del texto capturado por la coincidencia, que no es necesariamente la coincidencia. JS regex admite condiciones en el texto fuera de la captura con anticipación. Por ejemplosearchIndex("foobarfoobaz", "foo(?=baz)", true)
debería dar[6]
, no[0]
.o
fuente