JavaScript couper / couper / couper le dernier caractère dans la chaîne
j'ai une chaîne, 12345.00
, et je voudrais qu'elle retourne 12345.0
.
j'ai regardé trim
, mais il semble que c'est seulement rogner espace et slice
que je ne vois pas comment cela fonctionnerait. Toutes les suggestions?
22 réponses
vous pouvez utiliser le substrat fonction:
var str = "12345.00";
str = str.substring(0, str.length - 1); // "12345.0"
C'est la réponse acceptée, mais selon les conversations ci-dessous, la syntaxe tranche est beaucoup plus claire:
var str = "12345.00";
str = str.slice(0, -1); // "12345.0"
vous pouvez utiliser la substring méthode des objets de chaîne JavaScript:
s = s.substring(0, s.length - 4)
il supprime inconditionnellement les quatre derniers caractères de la chaîne de caractères s
.
cependant, si vous voulez conditionnellement supprimer les quatre derniers caractères, seulement si elles sont exactement _bar
:
var re = /_bar$/;
s.replace(re, "");
la méthode la plus simple est d'utiliser la méthode slice
de la chaîne, qui permet des positions négatives (correspondant à des offsets à partir de la fin de la chaîne):
var s = "your string";
var withoutLastFourChars = s.slice(0, -4);
si vous avez besoin de quelque chose de plus général pour supprimer tout après (et y compris) le dernier trait de soulignement, vous pouvez faire ce qui suit (tant que s
est garanti pour contenir au moins un trait de soulignement):
var s = "your_string";
var withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
// withoutLastChunk == "your"
pour un nombre comme votre exemple, je recommande de faire ceci au-dessus de substring
:
alert(parseFloat('12345.00').toFixed(1)); // 12345.0
notez que cela va réellement arrondir le nombre, bien que, je l'imagine est souhaitable, mais peut-être pas:
alert(parseFloat('12345.46').toFixed(1)); // 12345.5
utilisant la fonction slice de JavaScript:
var string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
Cela pourrait être utilisé pour supprimer '_bar' à la fin d'une chaîne, de n'importe quelle longueur.
une expression régulière est ce que vous recherchez:
var str = "foo_bar";
alert(str.replace(/_bar$/, ""));
Que Diriez-vous de:
var myString = "12345.00";
myString.substring(0, myString.length - 1);
"a string".match(/(.*).$/)[1] // => a strin
"a string".match(/(.*).$/) // returns ["a string", "a strin"]
"a string".match(/(.*).{2}$/)[1] // to get two chars off => a stri
- (.* ), capture n'importe quel caractère plusieurs fois
- ., correspond au dernier caractère, dans ce cas
- $, correspond à la fin de la chaîne de caractères
Utiliser les regex:
var aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
debris = string.split("_") //explode string into array of strings indexed by "_"
debris.pop(); //pop last element off the array (which you didn't want)
result = debris.join("_"); //fuse the remainng items together like the sun
essayez ceci:
var myString = "Hello World!";
myString.slice(0, -1);
Voici une alternative que je ne pense pas avoir vu dans les autres réponses, juste pour le plaisir.
var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));
N'est pas aussi lisible ou simple que slice ou substring, mais vous permet de jouer avec la chaîne en utilisant de belles méthodes array, donc intéressant de savoir.
si vous voulez faire un arrondi générique des flotteurs, au lieu de simplement tailler le dernier caractère:
var float1 = 12345.00,
float2 = 12345.4567,
float3 = 12345.982;
var MoreMath = {
/**
* Rounds a value to the specified number of decimals
* @param float value The value to be rounded
* @param int nrDecimals The number of decimals to round value to
* @return float value rounded to nrDecimals decimals
*/
round: function (value, nrDecimals) {
var x = nrDecimals > 0 ? 10 * parseInt(nrDecimals, 10) : 1;
return Math.round(value * x) / x;
}
}
MoreMath.round(float1, 1) => 12345.0
MoreMath.round(float2, 1) => 12345.5
MoreMath.round(float3, 1) => 12346.0
EDIT: semble qu'il existe une fonction intégrée pour cela, comme Paolo le souligne. Cette solution est évidemment beaucoup plus propre que la mienne. Utiliser parseFloat suivi de toFixed
if(str.substring(str.length - 4) == "_bar")
{
str = str.substring(0, str.length - 4);
}
https://jsfiddle.net/invos/w3zeqv6v /
utilisez simplement trim si vous ne voulez pas d'espaces
"11.01 °C".slice(0,-2).trim()
dans les cas où vous voulez supprimer quelque chose qui est proche de la fin d'une chaîne (dans le cas de chaînes de taille variable), vous pouvez combiner slice() et substr().
j'ai eu une chaîne avec un markup, construit dynamiquement, avec une liste d'étiquettes d'ancrage séparées par virgule. La chaîne ressemblait à quelque chose comme:
var str = "<a>text 1,</a><a>text 2,</a><a>text 2.3,</a><a>text abc,</a>";
pour supprimer la dernière virgule j'ai fait ce qui suit:
str = str.slice(0, -5) + str.substr(-4);
je préfère la fonction de substrat:
var str = "12345.00";
str = str.substrat(0, str.longueur - 1);
la fonction de tranche peut également être utilisée:
var str = "12345.00";
str = str.slice (-1); // passer la valeur négative comme premier argument supprime les caractères de end. Il en est de même de str.tranche (0, -1)
Résultat avec les deux méthodes est "12345.0".
@Jason:
vous pouvez utiliser slice! Vous avez juste à assurez-vous de savoir comment l'utiliser. Les #s positifs sont relatifs aux au début, les nombres négatifs sont par rapport à la fin.
js> "12345.00".slice(0,-1) 12345,0
désolé pour mon graphomany mais post a été étiqueté' jquery ' plus tôt. Donc, vous ne pouvez pas utiliser slice() à l'intérieur de jQuery parce que slice() est la méthode jQuery pour des opérations avec des éléments du DOM, pas de sous-chaînes ... En d'autres termes, la réponse @Jon Erickson suggère une solution vraiment parfaite.
cependant, votre méthode fonctionnera à partir de la fonction jQuery, à L'intérieur de Javascript simple. Besoin de dire en raison de la dernière discussion dans les commentaires, que jQuery est beaucoup plus souvent l'extension renouvelable de JS que son propre parent le plus connu ECMAScript.
ici aussi existent deux méthodes:
comme notre:
string.substring(from,to)
plus si", " index entaché de nullité retourne le reste de la chaîne. so:
string.substring(from)
positif ou négatif ...
et quelques autres - substr() - qui fournissent la gamme de sous-chaîne et de la longueur peut être positif qu':
string.substr(start,length)
aussi certains mainteneurs suggèrent que la dernière méthode string.substr(start,length)
ne fonctionne pas ou ne fonctionne pas avec une erreur pour MSIE.
essayez ceci:
<script>
var x="foo_foo_foo_bar";
for (var i=0; i<=x.length; i++) {
if (x[i]=="_" && x[i+1]=="b") {
break;
}
else {
document.write(x[i]);
}
}
</script>
vous pouvez également essayer l'exemple de travail en direct sur http://jsfiddle.net/informativejavascript/F7WTn/87 / .
utilisez substring pour obtenir tout à la gauche de _bar. Mais d'abord, vous devez obtenir l'instr de _bar de la chaîne:
str.substring(3, 7);
3 est le début et 7 est la longueur.