Supprimer tout après un certain caractère

281

Existe-t-il un moyen de tout supprimer après un certain personnage ou de tout choisir jusqu'à ce personnage? J'obtiens la valeur d'un href et jusqu'au "?", Et ce sera toujours une quantité différente de caractères.

Comme ça

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

Je veux que le href soit /Controller/Actionseulement, donc je veux tout supprimer après le "?".

J'utilise ceci maintenant:

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

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

     console.log(url);
 }
Dejan.S
la source

Réponses:

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

Échantillon ici

Je dois également mentionner que les fonctions de chaîne natives sont beaucoup plus rapides que les expressions régulières, qui ne devraient vraiment être utilisées qu'en cas de besoin (ce n'est pas un de ces cas).

Code mis à jour pour ne plus prendre en compte le «?»:

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

Échantillon ici

Demian Brecht
la source
15
ce code spaghetti ne devrait pas être la meilleure réponse. voir la réponse de la méthode de partage
LastT Tribunal
1
LoL - D'une manière ou d'une autre, ceux qui ne comprennent pas l'expression rationnelle et la façon dont les travaux fractionnés ont obtenu le droit de vote. Comprendre les méthodes String suffit. Comprendre le moins comment les choses fonctionnent et le plus grand code régit le monde: P J'ai donc ajouté une explication étape par étape à la réponse partagée (pour changer le monde).
1
LoL - Le partage peut accepter l'expression régulière, donc +1 pour ne pas utiliser le partage? LoL - Javascript utilise regex donc +1 pour ne pas utiliser Javascript? Comment plus de code et de complexité peuvent-ils en faire une tâche simple? N'est-ce pas à la fois regex et split plus simple et plus efficace?
295

Vous pouvez également utiliser la split()fonction. Cela semble être le plus simple qui me vienne à l'esprit :).

url.split('?')[0]

jsFiddle Demo

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

kapa
la source
1
que fait le [0] dans cette situation?
Dejan.S
13
splitrenvoie un tableau (dans ce cas, il a deux éléments, 0et 1), et [0]obtient le premier élément du tableau renvoyé.
kapa
41
+1, la meilleure chose à ce sujet est que cela fonctionne toujours, même s'il n'y a pas de "?"
Kevin
que devons-nous faire si nous voulons diviser '\'?
anud33p
1
J'adore cette réponse, si simple et pourtant vraiment puissante dans ce qu'elle vous donne
Richlewis
19
var href = "/Controller/Action?id=11112&value=4444";
href = href.replace(/\?.*/,'');
href ; //# => /Controller/Action

Cela fonctionnera s'il trouve un "?" et si ce n'est pas le cas

James Kyburz
la source
cela supprimera simplement le "?" et quelques autres à OP n'ont pas demandé
Kevin
4
Cela supprimera tout après le ?(inclus)
mcont
2
MEILLEURE RÉPONSE ! OP a demandé de supprimer TOUT après ?et a clairement déclaré de supprimer ?également en disant: Je veux que le href soit / Controller / Action uniquement
3

Si vous souhaitez également conserver "?" et il suffit de tout supprimer après ce caractère particulier, vous pouvez faire:

var str = "/Controller/Action?id=11112&value=4444",
    stripped = str.substring(0, str.indexOf('?') + '?'.length);

// output: /Controller/Action?
patad
la source
Cela ne fonctionne pas si la chaîne ne contient pas?
Stephan Bijzitter
@StephanBijzitter Oui, je sais. Puisque ma réponse dit: "si vous voulez aussi garder le ? " - il doit évidemment y avoir un point d'interrogation dans la chaîne pour le garder ..
patad
Étrange, il semble que mon commentaire était destiné à l'autre réponse de @Imran. Je ne sais pas pourquoi je l'ai affiché sur votre réponse.
Stephan Bijzitter
2

Cela fonctionne très bien pour moi:

var x = '/Controller/Action?id=11112&value=4444';
var remove_after= x.indexOf('?');
var result =  x.substring(0, remove_after);
alert(x);
Samina Samina
la source
1

Peut être une soirée très tardive: p

Vous pouvez utiliser une référence arrière $ '

$' - Inserts the portion of the string that follows the matched substring.

let str = "/Controller/Action?id=11112&value=4444"

let output = str.replace(/\?.+/g,"$'")

console.log(output)

Code Maniac
la source
0

A travaillé pour moi:

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

la source
-1

Cela peut facilement être fait en utilisant JavaScript pour référence voir le lien JS String

EDITER cela peut facilement se faire comme. ;)

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);
Imran
la source