Entferne alles nach einem bestimmten Zeichen


280

Gibt es eine Möglichkeit, alles nach einem bestimmten Charakter zu entfernen oder einfach alles bis zu diesem Charakter auszuwählen? Ich bekomme den Wert von einem href bis zum "?" Und es wird immer eine andere Anzahl von Zeichen sein.

So was

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

Ich möchte, dass die href /Controller/Actionnur ist, also möchte ich alles nach dem "?" Entfernen.

Ich benutze das jetzt:

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

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

     console.log(url);
 }

Antworten:


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

Probe hier

Ich sollte auch erwähnen, dass native Zeichenfolgenfunktionen viel schneller sind als reguläre Ausdrücke, die nur dann wirklich verwendet werden sollten, wenn dies erforderlich ist (dies ist nicht einer dieser Fälle).

Der Code wurde aktualisiert, um kein '?' Zu berücksichtigen:

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

Probe hier


15
Dieser Spaghetti-Code sollte nicht die beste Antwort sein. Siehe die Split-Methode Antwort
LastTribunal

1
LoL - Irgendwie verstehen diejenigen, die Regex nicht verstehen und wie Split funktioniert, die Stimmrechte. Es reicht aus, die String-Methoden zu verstehen. Am wenigsten verstehen, wie die Dinge funktionieren und der größte Code die Welt regiert: P Also habe ich der geteilten Antwort eine schrittweise Erklärung hinzugefügt (um die Welt zu ändern).

1
LoL - Der Split kann Regex akzeptieren, also +1, wenn Split nicht verwendet wird? LoL - Javascript Regex verwenden, also +1, wenn Javascript nicht verwendet wird? Wie kann mehr Code und Komplexität es zu einer einfachen Aufgabe machen? Ist nicht sowohl Regex als auch Split einfacher und effektiver?

293

Sie können die split()Funktion auch verwenden . Dies scheint die einfachste zu sein, die mir in den Sinn kommt :).

url.split('?')[0]

jsFiddle Demo

Ein Vorteil ist, dass diese Methode auch dann funktioniert, wenn ?die Zeichenfolge keine enthält. Sie gibt die gesamte Zeichenfolge zurück.


1
Was macht die [0] in dieser Situation?
Dejan.S

13
splitGibt ein Array zurück (in diesem Fall hat es zwei Elemente 0und 1) und [0]ruft das erste Element des zurückgegebenen Arrays ab.
Kapa

41
+1, das Beste daran ist, dass es immer funktioniert, auch wenn es kein '?'
Kevin

Was sollen wir tun, wenn wir '\' teilen wollen?
anud33p

1
Ich

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

Dies funktioniert, wenn ein '?' und wenn nicht


Dadurch wird nur das '?' und einige andere zu OP fragten nicht nach
Kevin

4
Dadurch wird alles nach dem ?(enthaltenen)
mcont entfernt

2
BESTE ANTWORT ! OP bat um das Entfernen von ALLES nach ?und klar angegeben, ?auch durch sagen zu entfernen : Ich möchte, dass die href nur / Controller / Aktion sein

3

Wenn Sie auch "?" und einfach alles danach entfernen diesem bestimmten Charakter, Sie können tun:

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

// output: /Controller/Action?

Dies funktioniert nicht, wenn die Zeichenfolge keine enthält?
Stephan Bijzitter

@StephanBijzitter Ja, ich weiß. Da meine Antwort sagt: "Wenn Sie auch das behalten wollen ? " - es muss offensichtlich ein Fragezeichen in der Zeichenfolge sein, um zu behalten ..
Patad

Seltsam, anscheinend war mein Kommentar für die andere Antwort von @Imran gedacht. Ich weiß nicht, warum ich es auf Ihrer Antwort gepostet habe.
Stephan Bijzitter

1

Kann sehr spät sein Party: p

Sie können eine Rückreferenz $ 'verwenden

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

Es funktioniert bei mir sehr gut:

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

0

Arbeitete für mich:

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

-2

Es kann einfach mit JavaScript als Referenz durchgeführt werden, siehe Link JS String

BEARBEITEN kann es einfach als. ;)

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.