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?

1543
demandé sur Peter Mortensen 2009-06-05 00:31:53

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"
2566
répondu Jon Erickson 2017-12-28 00:29:58

vous pouvez utiliser tranche ! Tu dois juste t'assurer de savoir t'en servir. Les #s positifs sont relatifs au début, les nombres négatifs sont relatifs à la fin.

js>"12345.00".slice(0,-1)
12345.0
1176
répondu Jason S 2016-01-06 18:32:39

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, "");
250
répondu Alex Martelli 2017-11-15 19:10:03

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"
152
répondu Tim Down 2013-02-20 17:53:15

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
64
répondu Paolo Bergantino 2009-06-04 20:52:33

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.

21
répondu Akshay Joshi 2018-01-30 07:50:57

une expression régulière est ce que vous recherchez:

var str = "foo_bar";
alert(str.replace(/_bar$/, ""));
14
répondu w35l3y 2017-11-15 19:10:17

Que Diriez-vous de:

var myString = "12345.00";
myString.substring(0, myString.length - 1);
9
répondu dariom 2009-06-04 20:43:25
"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
  1. (.* ), capture n'importe quel caractère plusieurs fois
  2. ., correspond au dernier caractère, dans ce cas
  3. $, correspond à la fin de la chaîne de caractères
7
répondu juanpastas 2012-12-28 04:46:22

Utiliser les regex:

var aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
7
répondu Marc477 2015-07-29 04:58:25
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
5
répondu uofc 2014-05-27 10:47:10

essayez ceci:

var myString = "Hello World!";
myString.slice(0, -1);
5
répondu Somwang Souksavatd 2017-11-15 19:12:09

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.

4
répondu Mark Walters 2018-03-13 12:03:08

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

3
répondu PatrikAkerstrand 2009-06-04 20:47:07
var str = "test!";
var newStr = str.slice(0,-1); //test
3
répondu 2013-11-20 15:52:29
if(str.substring(str.length - 4) == "_bar")
{
    str = str.substring(0, str.length - 4);
}
1
répondu Matthew Flaschen 2010-08-30 03:08:50
1
répondu invos 2017-05-23 12:10:41

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);
-1
répondu bestafubana 2017-11-15 19:16:38

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".

-1
répondu Animan 2018-09-19 07:53:53

@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.

-3
répondu swift 2014-06-16 22:38:12

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 / .

-3
répondu kamal 2017-11-15 19:11:21

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.

-6
répondu griegs 2017-11-15 19:08:41