Usuń wszystko po określonej postaci

281

Czy istnieje sposób, aby usunąć wszystko po określonej postaci lub po prostu wybrać wszystko do tej postaci? Dostaję wartość od href aż do „?” I zawsze będzie to inna liczba znaków.

Lubię to

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

Chcę, aby href był /Controller/Actiontylko, więc chcę usunąć wszystko po „?”.

Używam tego teraz:

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

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

     console.log(url);
 }
Dejan.S
źródło

Odpowiedzi:

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

Próbka tutaj

Powinienem również wspomnieć, że natywne funkcje łańcuchowe są znacznie szybsze niż wyrażenia regularne, które naprawdę powinny być używane tylko wtedy, gdy jest to konieczne (nie jest to jeden z tych przypadków).

Zaktualizowany kod, aby uwzględnić brak „?”:

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

Próbka tutaj

Demian Brecht
źródło
15
ten kod spaghetti nie powinien być najlepszą odpowiedzią. odpowiedź na podzieloną metodę
LastTribunal,
1
LoL - W jakiś sposób ci, którzy nie rozumieją wyrażenia regularnego i tego, w jaki sposób działa podział, zdobyli prawo głosu. Wystarczy zrozumieć metody String. Najmniej rozumiem, jak to działa, a największy kod rządzi światem: P Więc dodałem wyjaśnienie krok po kroku do podzielonej odpowiedzi (aby zmienić wolrd).
1
LoL - podział może zaakceptować wyrażenie regularne, więc +1 za nieużywanie podziału? LoL - JavaScript używa wyrażenia regularnego, więc +1 za nie używanie Javascript? W jaki sposób więcej kodu i złożoność może sprawić, że będzie to proste zadanie? Czy zarówno regex, jak i split są prostsze i bardziej skuteczne?
294

Możesz także użyć split()funkcji. To wydaje się najłatwiejsze, jakie przychodzi mi na myśl :).

url.split('?')[0]

jsFiddle Demo

Zaletą jest to, że ta metoda będzie działać, nawet jeśli nie ma ?łańcucha - zwróci cały łańcuch.

kapa
źródło
1
co robi [0] w tej sytuacji?
Dejan.S
13
splitzwraca tablicę (w tym przypadku ma dwa elementy 0i 1) i [0]otrzymuje pierwszy element zwróconej tablicy.
kapa
41
+1, najlepsze jest to, że zawsze działa, nawet jeśli nie ma „?”
Kevin
co powinniśmy zrobić, jeśli chcemy podzielić „\”?
anud33p
1
Uwielbiam tę odpowiedź, tak prostą, a jednocześnie naprawdę potężną w tym, co daje
Richlewis
19
var href = "/Controller/Action?id=11112&value=4444";
href = href.replace(/\?.*/,'');
href ; //# => /Controller/Action

To zadziała, jeśli znajdzie „?” a jeśli nie

James Kyburz
źródło
spowoduje to usunięcie „?” a niektórzy inni z OP nie prosili
Kevin
4
Spowoduje to usunięcie wszystkiego po ?(w zestawie)
mcont
2
NAJLEPSZA ODPOWIEDŹ ! OP poprosił o usunięcie WSZYSTKIE po ?i wyraźnie oświadczył, że należy usunąć ?również poprzez powiedzenie: Chcę, aby href był / Controller / Action only
3

Jeśli chcesz również zachować „?” i po prostu usuń wszystko po tej konkretnej postaci, możesz:

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

// output: /Controller/Action?
patad
źródło
To nie działa, jeśli ciąg nie zawiera?
Stephan Bijzitter
@StephanBijzitter Tak, wiem. Ponieważ moja odpowiedź brzmi: „jeśli też chcesz zachować ? ” - oczywiście musi być znak zapytania w łańcuchu, aby zachować…
patad
Dziwne, wygląda na to, że mój komentarz miał na inną odpowiedź @Imran. Nie wiem, dlaczego opublikowałem to w twojej odpowiedzi.
Stephan Bijzitter,
1

Może być bardzo późna impreza: str

Możesz użyć referencji $ '

$' - 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
źródło
1

Działa dla mnie bardzo ładnie:

var x = '/Controller/Action?id=11112&value=4444';
var remove_after= x.indexOf('?');
var result =  x.substring(0, remove_after);
alert(x);
Samina Samina
źródło
0

Pracował dla mnie:

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

źródło
-1

Można to łatwo zrobić za pomocą JavaScript w celach informacyjnych patrz link JS String

EDYCJA można to łatwo zrobić jako. ;)

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
źródło