Rimuovi tutto dopo un certo personaggio


281

C'è un modo per rimuovere tutto dopo un certo personaggio o semplicemente scegliere tutto fino a quel personaggio? Sto ottenendo il valore da un href e fino a "?", E sarà sempre una diversa quantità di caratteri.

Come questo

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

Voglio che l'href sia /Controller/Actionsolo, quindi voglio rimuovere tutto dopo il "?".

Lo sto usando ora:

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

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

     console.log(url);
 }

Risposte:


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

Esempio qui

Vorrei anche menzionare che le funzioni di stringa native sono molto più veloci delle espressioni regolari, che dovrebbero essere realmente utilizzate solo quando necessario (questo non è uno di quei casi).

Codice aggiornato per tenere conto di nessun '?':

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

Esempio qui


15
questo codice spaghetti non dovrebbe essere la risposta migliore. vedere la risposta del metodo split
LastTribunal

1
LoL - In qualche modo quelli che non capiscono la regex e come funziona la divisione hanno ottenuto i poteri di voto. Comprendere i metodi String è sufficiente. Comprendendo almeno come funzionano le cose e il codice più grande governa il mondo: P Quindi ho aggiunto una spiegazione passo dopo passo alla risposta divisa (per cambiare il mondo).

1
LoL - La divisione può accettare regex quindi +1 per non usare la divisione? LoL - Javascript usa regex quindi +1 per non usare Javascript? In che modo più codice e complessità possono renderlo un compito semplice? Sia regex che split non sono più semplici ed efficaci?

294

Puoi anche usare la split()funzione. Questo sembra essere il più semplice che mi viene in mente :).

url.split('?')[0]

jsFiddle Demo

Un vantaggio è che questo metodo funzionerà anche se non ci sono ?nella stringa - restituirà l'intera stringa.


1
cosa fa lo [0] in questa situazione?
Dejan.S

13
splitrestituisce un array (in questo caso ha due elementi 0e 1) e [0]ottiene il primo elemento dell'array restituito.
Kapa,

41
+1, la cosa migliore di questo è che funziona sempre, anche se non c'è "?"
Kevin,

cosa dovremmo fare se vogliamo dividere '\'?
anud33p,

1
Adoro questa risposta, così semplice eppure davvero potente in quello che ti dà
Richlewis

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

Funzionerà se trova un '?' e se non lo fa


questo rimuoverà semplicemente il '?' e altri ad OP non lo hanno chiesto
Kevin,

4
Questo rimuoverà tutto dopo il ?(incluso)
mcont

2
MIGLIORE RISPOSTA ! OP ha chiesto di rimuovere TUTTO dopo ?e ha dichiarato chiaramente di rimuovere ?anche dicendo: Voglio che l'href sia / Controller / Solo azione

3

Se vuoi anche mantenere "?" e basta rimuovere tutto dopo quel particolare personaggio, puoi fare:

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

// output: /Controller/Action?

Questo non funziona se la stringa non contiene un?
Stephan Bijzitter del

@StephanBijzitter Sì, lo so. Dal momento che la mia risposta dice: "se vuoi anche mantenere il ? " - ovviamente ci deve essere un punto interrogativo nella stringa da mantenere ..
patad

Strano, sembra che il mio commento sia stato pensato per l'altra risposta di @Imran. Non so perché l'ho pubblicato sulla tua risposta.
Stephan Bijzitter,

1

Potrebbe essere una festa molto tardi: p

È possibile utilizzare un riferimento posteriore $ '

$' - 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)


1

Funziona molto bene per me:

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

0

Ha funzionato per me:

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

-1

Può essere fatto facilmente usando JavaScript come riferimento vedi link JS String

EDIT può facilmente fare come. ;)

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.