javascript - Ta bort allt efter ett visst tecken


Finns det ett sätt att ta bort allt efter ett visst tecken eller bara välja allt fram till det tecknet? Jag får värdet från en href och fram till "?", och det kommer alltid att vara olika antal tecken.

Så här

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

Jag vill att href ska vara /Controller/Action endast, så jag vill ta bort allt efter "?".

Jag använder det här nu:

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

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

     console.log(url);
 }

Svar #1

Du kan också använda split()-funktionen. Detta verkar vara den enklaste som kommer till mitt sinne :).

url.split('?')[0]

jsFiddle Demo

En fördel är att denna metod fungerar även om det inte finns någon ? i strängen - den kommer att returnera hela strängen.

Svar #2

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

Exempel här

Jag bör också nämna att inbyggda strängfunktioner är mycket snabbare än reguljära uttryck, som egentligen bara bör användas när det är nödvändigt (detta är inte ett av de fallen).

Uppdaterad kod för att hantera avsaknad av '?' :

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

Exempel här

Svar #3

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

Detta fungerar om det hittar en '?' och om det inte gör det

Svar #4

Kan bli en mycket sen fest :p

Du kan använda en bakåtreferens $'

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

Relaterade artiklar