Puis-je utiliser une regex JavaScript pour compter le nombre de caractères blancheurs avant le premier caractère de texte de la chaîne? Je me soucie seulement s'il y a 0, 1 et 2 +. P>
Ma solution de travail actuelle consiste à avoir trois regexes et simplement à utiliser une correspondance pour déterminer la catégorie 0,1 ou plus de 2+ (modèle séparé pour chacun), mais je recherche une solution plus élégante. P>
Est-il même possible de compter les modèles avec regex? Je pourrais utiliser un groupement non gourmand et compter la longueur, je suppose ... p>
6 Réponses :
" a".match(/^\s{0,2}/)[0].length
This regex matches between 0 and 2 whitespace characters at the beginning of a string.
Pourquoi pas theString.match (/ ^ \ s + /) [0] .Longueur code> - Le PO signifie, je pense que 2+ signifie deux ou plus, bien que c'était étrangement libellé.
@Ray: Cela ressemble à il n'y a que trois catégories.
Correct, seulement trois catégories: 0, 1 ou 2+. J'ai aussi besoin de tout obtenir après les principaux espaces bleus, comme une garniture Java.
Java Coup str.replace (/ ^ \ s * (. *?) \ s * $ /, "1 $ 1") code>
@Slaks oh mon mauvais. Je voulais dire \ s * code> au fait. Bonne réponse!!
Cela devrait faire le travail: exemple: http: // jsfiddle.net/nc3sss/1/ p> p>
Vous pouvez simplement faire:
" aaa".replace(/^(\s*).*$/,"$1").length
Ne semble pas fonctionner quand il y a zéro espaces initiaux - il retourne la longueur de l'ensemble du mot.
Je ne suis pas sûr que je n'utiliserais pas une regex dans la vie réelle pour ce travail, mais vous pouvez les faire correspondre dans une capture et le voir leur longueur:
function countLeadingSpaces2(str) {
for (var i = 0; i < str.length; i++) {
if (str[i] != " " && str[i] != "\t") {
return(i);
}
}
return(str.length);
}
Pourquoi ne pas utiliser \ s * code> et se débarrasser des "matchs" vérifier complètement?
/ ^ (\ s *) [^ \ t] / code> d'une chaîne vide renvoie NULL, ce qui signifie que vous ne pouvez pas directement la désarférence [1] longueur code> sur une correspondance à l'aide de il sans une sorte de chèque. Je ne suggère pas que ma méthode est la plus compacte, mais j'essayais d'être en sécurité pour tous les cas de bord.
Aah, je vois - mais je pense que cela retourne null car il ne peut pas trouver le [\ t] code> bit. Depuis que les regex sont gourmands quand même, vous pouvez simplement utiliser ^ (\ s *) code> seul.
Tu as raison. J'ai mis à jour la réponse. Cela finit par quelque chose de similaire à ce que les autres personnes ont.
Mais succinct et réutilisable, donc +1 pour ça :-)
Pourquoi pas em> utiliser simplement un groupe de capture et vérifier la longueur: <html>
<head>
</head>
<body>
<script language="javascript">
var myStr = " hello";
var myRe = /^(\s*)(.*)$/;
var match = myRe.exec(myStr);
alert(match[1].length); // gives 2
alert(match[2]); // gives "hello"
</script>
</body>
</html
Vous pouvez trouver l'index du premier caractère non espace de la chaîne, Quel est le même que le nombre de principaux caractères blanches.
t.search(/\S/);
Est-ce que 2+ signifie deux ou plus? Est-ce votre intention de produire un compte pour chaque type de chaîne?