373 votes

Supprimer tout ce qui dépasse un certain caractère

Y a-t-il un moyen de supprimer tout ce qui suit un certain caractère ou de choisir tout ce qui va jusqu'à ce caractère ? Je récupère la valeur à partir d'un href et jusqu'au " ?", et il y aura toujours un nombre différent de caractères.

Comme ceci

/Controller/Action?id=11112&value=4444

Je veux que le href soit /Controller/Action seulement, donc je veux enlever tout ce qui se trouve après le " ?".

J'utilise ça maintenant :

 $('.Delete').click(function (e) {
     e.preventDefault();

     var id = $(this).parents('tr:first').attr('id');                
     var url = $(this).attr('href');

     console.log(url);
 }

521voto

Demian Brecht Points 11083
var s = '/Controller/Action?id=11112&value=4444';
s = s.substring(0, s.indexOf('?'));
document.write(s);

Echantillon ici

Je dois également mentionner que les fonctions natives des chaînes de caractères sont beaucoup plus rapides que les expressions régulières, qui ne doivent être utilisées que lorsque cela est nécessaire (ce n'est pas le cas ici).

Mise à jour du code pour tenir compte de l'absence de ' ?

var s = '/Controller/Action';
var n = s.indexOf('?');
s = s.substring(0, n != -1 ? n : s.length);
document.write(s);

Echantillon ici

27 votes

Ce code spaghetti ne devrait pas être la meilleure réponse. voir la réponse de la méthode de fractionnement

1 votes

LoL - D'une manière ou d'une autre, ceux qui ne comprennent pas le regex et le fonctionnement du split ont obtenu le droit de vote. Comprendre les méthodes String est suffisant. Le moins que l'on puisse faire est de comprendre comment les choses fonctionnent et comment le plus gros code gouverne le monde :P J'ai donc ajouté une explication étape par étape à la réponse sur le fractionnement (pour changer le monde).

1 votes

LoL - Le split peut accepter les regex donc +1 pour ne pas utiliser le split ? LoL - Le Javascript utilise le regex donc +1 pour ne pas utiliser le Javascript ? Comment plus de code et de complexité peuvent-ils rendre une tâche simple ? Le regex et le split ne sont-ils pas tous deux plus simples et plus efficaces ?

482voto

kapa Points 41886

Vous pouvez également utiliser le split() fonction. C'est la plus simple qui me vient à l'esprit :).

url.split('?')[0]

Démonstration de jsFiddle

Un avantage est que cette méthode fonctionne même s'il n'y a pas de ? dans la chaîne - il retournera la chaîne entière.

1 votes

Que fait le [0] dans cette situation ?

16 votes

split renvoie un tableau (dans ce cas, il comporte deux éléments, 0 y 1 ), et [0] récupère le premier élément du tableau retourné.

54 votes

+1, la meilleure chose à propos de ceci est que ça marche toujours, même s'il n'y a pas de " ? ".

29voto

James Kyburz Points 4352
var href = "/Controller/Action?id=11112&value=4444";
href = href.replace(/\?.*/,'');
href ; //# => /Controller/Action

Cela fonctionnera s'il trouve un '?' et s'il ne le fait pas.

0 votes

Cela supprimera simplement le " ?" et d'autres éléments que le PO n'a pas demandé.

4 votes

Cela supprimera tout ce qui se trouve après le ? (inclus)

2 votes

MEILLEURE RÉPONSE ! L'OP a demandé d'enlever TOUT après ? et clairement indiqué pour supprimer ? également par dire : Je veux que le lien soit /Controller/Action uniquement.

0voto

d689p Points 55

Ça a marché pour moi :

      var first = regexLabelOut.replace(/,.*/g, "");

-1voto

Imran Points 1762

Il est facile de le faire en utilisant JavaScript. Pour plus d'informations, voir le lien. JS String

EDIT c'est facile à faire ;)

var url="/Controller/Action?id=11112&value=4444 ";
var parameter_Start_index=url.indexOf('?');
var action_URL = url.substring(0, parameter_Start_index);
alert('action_URL : '+action_URL);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X