Existe uma maneira de recuperar as posições de caractere (inicial) dentro de uma sequência de resultados de uma correspondência de expressão regular () em Javascript?
javascript
regex
match
string-matching
stagas
fonte
fonte
re
como variável e a adição dog
modificador são cruciais! Caso contrário, você obterá um loop infinito.undefined
. jsfiddle.net/6uwn1vof/2, que não é um exemplo de pesquisa como o seu.g
bandeira e ela funcionará. Comomatch
é uma função da string, não da regex, ela não pode ser com estadoexec
, portanto, ela só a trata comoexec
(por exemplo, tem uma propriedade de índice) se você não está procurando uma correspondência global ... porque a condição de estado não importa .Aqui está o que eu vim com:
fonte
match.index + match[0].length
também funciona para a posição final.match.index + match[0].length - 1
?.slice()
e.substring()
. O fim inclusivo seria 1 a menos, como você diz. (Tenha cuidado para que inclusivo geralmente signifique o índice do último caractere dentro da correspondência, a menos que seja uma correspondência vazia onde é 1 antes da correspondência e pode estar-1
fora da cadeia inteiramente para correspondência vazia no início ...)Nos documentos developer.mozilla.org sobre o
.match()
método String :Ao lidar com uma regex não global (ou seja, sem
g
sinalização em sua regex), o valor retornado por.match()
possui umaindex
propriedade ... tudo o que você precisa fazer é acessá-la.Aqui está um exemplo mostrando que também funciona:
Testei com sucesso isso desde o IE5.
fonte
Você pode usar o
search
método doString
objeto. Isso funcionará apenas para a primeira partida, mas fará o que você descreve. Por exemplo:fonte
Aqui está um recurso interessante que descobri recentemente, tentei isso no console e parece funcionar:
Que retornou: "borda 6 inferior 13 esquerda 18 raio"
Então, isso parece ser o que você está procurando.
fonte
arguments
que é a posição. Não é "o segundo argumento". Os argumentos da função são "correspondência completa, grupo1, grupo2, ...., índice de correspondência, sequência completa correspondida"Esse membro fn retorna uma matriz de posições baseadas em 0, se houver, da palavra de entrada dentro do objeto String
Agora tente
Você também pode inserir expressões regulares:
Aqui se obtém o índice de posição do termo linear.
fonte
fonte
str.indexOf
aqui apenas encontra a próxima ocorrência do texto capturado pela correspondência, que não é necessariamente a correspondência. O JS regex suporta condições no texto fora da captura com lookahead. Por exemplo,searchIndex("foobarfoobaz", "foo(?=baz)", true)
deve dar[6]
, não[0]
.Nos navegadores modernos, você pode fazer isso com string.matchAll () .
O benefício dessa abordagem vs
RegExp.exec()
é que ela não depende do estado regular, como na resposta da @ Gumbo .fonte
ou
fonte