Удалить все после определенного персонажа

281

Есть ли способ удалить все после определенного персонажа или просто выбрать все до этого персонажа? Я получаю значение от href до «?», И всегда будет различное количество символов.

Как это

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

Я хочу, чтобы href был /Controller/Actionтолько, поэтому я хочу удалить все после "?".

Я использую это сейчас:

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

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

     console.log(url);
 }
Dejan.S
источник

Ответы:

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

Образец здесь

Я должен также упомянуть, что нативные строковые функции намного быстрее, чем регулярные выражения, которые действительно должны использоваться только при необходимости (это не один из тех случаев).

Обновлен код, чтобы учесть отсутствие '?':

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

Образец здесь

Демиан Брехт
источник
15
этот код спагетти не должен быть лучшим ответом. см. ответ метода разделения
LastTribunal
1
LoL - Почему-то те, кто не понимает регулярные выражения, и то, как сплит работает, получили право голоса. Понимание методов String достаточно. Наименьшее понимание того, как все работает, и наибольший код правит миром: P Итак, я добавил пошаговое объяснение к разделенному ответу (чтобы изменить слова wolrd).
1
LoL - Сплит может принять регулярное выражение, так что +1, если вы не используете сплит? LoL - Javascript использовать регулярные выражения, так что +1 за не использование Javascript? Как можно больше кода и сложности сделать это простой задачей? Разве и регулярное выражение, и разбиение не проще и эффективнее?
295

Вы также можете использовать split()функцию. Это кажется самым простым, что приходит мне в голову :).

url.split('?')[0]

jsFiddle Demo

Одним из преимуществ является то, что этот метод будет работать, даже если ?в строке его нет - он вернет всю строку.

капа
источник
1
что делает [0] в этой ситуации?
Dejan.S
13
splitвозвращает массив (в этом случае он имеет два элемента 0и 1) и [0]получает первый элемент возвращаемого массива.
Капа
41
+1, лучше всего то, что он всегда работает, даже если нет «?»
Кевин
что нам делать, если мы хотим разделить '\'?
anud33p
1
Люблю этот ответ, такой простой и в то же время действительно мощный в том, что он дает вам
Richlewis
19
var href = "/Controller/Action?id=11112&value=4444";
href = href.replace(/\?.*/,'');
href ; //# => /Controller/Action

Это будет работать, если он найдет «?» и если это не так

Джеймс Кибурз
источник
это просто уберет '?' и некоторые другие к OP не просили
Кевин
4
Это удалит все после ?(включено)
mcont
2
ЛУЧШИЙ ОТВЕТ ! ОП попросил удалить ВСЕ после ?и четко заявил, что удалить ?также, скажем: я хочу, чтобы href был / Controller / Action only
3

Если вы также хотите оставить «?» и просто удалить все после этого конкретного персонажа, вы можете сделать:

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

// output: /Controller/Action?
patad
источник
Это не работает, если строка не содержит?
Stephan Bijzitter
@StephanBijzitter Да, я знаю. Так как мой ответ говорит: «если вы также хотите сохранить ? » - очевидно, что в строке должен быть знак вопроса, чтобы сохранить ..
patad
Странно, кажется, мой комментарий был предназначен для другого ответа @Imran. Не знаю, почему я разместил это в вашем ответе.
Стефан Бийзиттер
2

Это работает для меня очень хорошо:

var x = '/Controller/Action?id=11112&value=4444';
var remove_after= x.indexOf('?');
var result =  x.substring(0, remove_after);
alert(x);
Самина Самина
источник
1

Может быть очень поздно вечеринка: p

Вы можете использовать обратную ссылку $ '

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

Код Маньяк
источник
0

Работал для меня:

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

источник
-1

Это легко сделать, используя JavaScript для справки, см. Ссылку JS String.

РЕДАКТИРОВАТЬ это можно легко сделать как. ;)

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);
Имран
источник