Couper une corde à la nième occurrence d'un caractère
ce que je veux faire c'est prendre une chaîne comme this.those.that
et obtenir une sous-chaîne ou de la n-ième occurrence d'un caractère. Ainsi, depuis le début de la chaîne à la 2ème occurrence de .
retour this.those
. De même, à partir de la 2ème occurrence de .
à la fin de la chaîne de retour that
. Désolé si ma question Est brumeuse, ce n'est pas si facile à expliquer. Aussi, s'il vous plaît ne suggérez pas de faire des variables supplémentaires, et le résultat sera dans une chaîne et non un tableau.
5 réponses
Vous pouvez le faire sans tableaux, mais il faudrait plus de code et serait moins lisible.
généralement, vous voulez seulement utiliser autant de code pour obtenir le travail fait, et cela augmente également la lisibilité. Si vous trouvez que cette tâche devient une question de performance (benchmark it), vous pouvez décider de commencer le remaniement pour la performance.
var str = 'this.those.that',
delimiter = '.',
start = 1,
tokens = str.split(delimiter).slice(start),
result = tokens.join(delimiter); // those.that
essaye ceci :
"qwe.fs.xczv.xcv.xcv.x".replace(/([^\.]*\.){3}/, '');
"xcv.xcv.x"
"qwe.fs.xczv.xcv.xcv.x".replace(/([^\.]*\.){**nth**}/, '');
- où est nth est la quantité d'occurrence à supprimer.
je suis perplexe quant à savoir pourquoi vous voulez faire des choses purement avec des fonctions de chaîne, mais je suppose que vous pourriez faire quelque chose comme ce qui suit:
//str - the string
//c - the character or string to search for
//n - which occurrence
//fromStart - if true, go from beginning to the occurrence; else go from the occurrence to the end of the string
var cut = function (str, c, n, fromStart) {
var strCopy = str.slice(); //make a copy of the string
var index;
while (n > 1) {
index = strCopy.indexOf(c)
strCopy = strCopy.substring(0, index)
n--;
}
if (fromStart) {
return str.substring(0, index);
} else {
return str.substring(index+1, str.length);
}
}
cependant, je prône fortement quelque chose comme le code beaucoup plus simple d'alex.
Juste au cas où quelqu'un a besoin à la fois de "ce" et "ceux qui.cela" d'une manière comme alex décrit dans soncommentaire, voici un code modifié:
var str = 'this.those.that',
delimiter = '.',
start = 1,
tokens = str.split(delimiter),
result = [tokens.slice(0, start), tokens.slice(start)].map(function(item) {
return item.join(delimiter);
}); // [ 'this', 'those.that' ]
document.body.innerHTML = result;
Si vous voulez vraiment en tenir à la chaîne de méthodes, puis:
// Return a substring of s upto but not including
// the nth occurence of c
function getNth(s, c, n) {
var idx;
var i = 0;
var newS = '';
do {
idx = s.indexOf(c);
newS += s.substring(0, idx);
s = s.substring(idx+1);
} while (++i < n && (newS += c))
return newS;
}