En javascript, existe-t-il un équivalent de String.indexOf() qui prend une expression régulière au lieu d'une chaîne pour le premier paramètre tout en autorisant un second paramètre ?
J'ai besoin de faire quelque chose comme
str.indexOf(/[abc]/ , i);
et
str.lastIndexOf(/[abc]/ , i);
Alors que String.search() prend un regexp comme paramètre, il ne me permet pas de spécifier un second argument !
Editar:
Cela s'est avéré plus difficile que je ne le pensais au départ, j'ai donc écrit une petite fonction de test pour tester toutes les solutions proposées... elle suppose que regexIndexOf et regexLastIndexOf ont été ajoutés à l'objet String.
function test (str) {
var i = str.length +2;
while (i--) {
if (str.indexOf('a',i) != str.regexIndexOf(/a/,i))
alert (['failed regexIndexOf ' , str,i , str.indexOf('a',i) , str.regexIndexOf(/a/,i)]) ;
if (str.lastIndexOf('a',i) != str.regexLastIndexOf(/a/,i) )
alert (['failed regexLastIndexOf ' , str,i,str.lastIndexOf('a',i) , str.regexLastIndexOf(/a/,i)]) ;
}
}
et je teste comme suit pour m'assurer qu'au moins pour une regexp d'un caractère, le résultat est le même que si nous utilisions indexOf
//Chercher le a parmi les xes
test('xxx') ;
test('axx') ;
test('xax') ;
test('xxa') ;
test('axa') ;
test('xaa') ;
test('aax') ;
test('aaa') ;
0 votes
|
à l'intérieur de[ ]
correspond au caractère littéral|
. Vous vouliez probablement dire[abc]
.0 votes
Oui merci vous avez raison, je vais le corriger mais la regexp elle-même n'est pas pertinente....
0 votes
J'ai mis à jour ma réponse Pat, merci pour tout commentaire.
0 votes
J'ai trouvé une approche plus simple et efficace en utilisant simplement string.match(/[A-Z]/). S'il n'y a rien, la méthode retourne null, sinon vous obtenez un objet, vous pouvez faire match(/[A-Z]/).index pour obtenir l'indice de la première majuscule