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

#javascript #jquery

#javascript #jquery

Вопрос:

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

Вот так

 /Controller/Action?id=11112amp;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);
 }
  

Ответ №1:

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

 url.split('?')[0]
  

Демонстрация jsFiddle

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

Комментарии:

1. что делает [0] в этой ситуации?

2. split возвращает массив (в данном случае он состоит из двух элементов, 0 и 1 ), и [0] получает первый элемент возвращаемого массива.

3. 1, самое лучшее в этом то, что это всегда работает, даже если нет ‘?’

4. Мне нравится этот ответ, такой простой и в то же время действительно мощный в том, что он дает вам

5. Я на самом деле изменил ответ на это, поскольку это более гибкое и просто более чистое решение в целом.

Ответ №2:

 var s = '/Controller/Action?id=11112amp;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);
  

Пример здесь

Комментарии:

1. этот спагетти-код не должен быть лучшим ответом. смотрите ответ метода разделения

2. LoL — Каким-то образом те, кто не понимает regex и как работает split, получили право голоса. Достаточно понимания строковых методов. Наименьшее понимание того, как все работает, и самый большой код правит миром: P Поэтому я добавил пошаговое объяснение к разделенному ответу (чтобы изменить wolrd).

3. LoL — Разделение может принимать регулярное выражение, поэтому 1 за то, что не использовал разделение? LoL — Javascript использует регулярное выражение so 1 за то, что не использует Javascript? Как большее количество кода и сложность могут сделать это простой задачей? Не проще ли и регулярное выражение, и разделение?

4. @LastTribunal Я на самом деле изменил ответ сегодня. Разделение является более гибким и чистым решением.

Ответ №3:

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

Это сработает, если он найдет ‘?’ и если это не так

Комментарии:

1. это просто удалит ‘?’ и некоторые другие, которые OP не запрашивал

2. Это приведет к удалению всего после ? (включено)

3. ЛУЧШИЙ ОТВЕТ ! OP попросил удалить ВСЕ после ? и четко указал удалить ? также, сказав: я хочу, чтобы href был только / Controller / Action

Ответ №4:

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

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

 $' - Inserts the portion of the string that follows the matched substring.
  

 let str = "/Controller/Action?id=11112amp;value=4444"

let output = str.replace(/?.*/g,"$'")

console.log(output)  

Ответ №5:

У меня это работает очень хорошо:

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

Ответ №6:

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

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

// output: /Controller/Action?
  

Комментарии:

1. Это не сработает, если строка не содержит ?

2. @StephanBijzitter Да, я знаю. Поскольку в моем ответе говорится: «если вы также хотите сохранить ? » — очевидно, что в строке должен быть вопросительный знак, который нужно сохранить..

3. Странно, кажется, мой комментарий предназначался для другого ответа @Imran. Не знаю, почему я разместил это в вашем ответе.

Ответ №7:

Вы также можете использовать split() метод, который, на мой взгляд, является самым простым методом для достижения этой цели.

Например:

 let dummyString ="Hello Javascript: This is dummy string"
dummyString = dummyString.split(':')[0]
console.log(dummyString)
// Returns "Hello Javascript"  

Источник: https://thispointer.com/javascript-remove-everything-after-a-certain-character /

Комментарии:

1. Автор kapa уже дал правильный ответ, используя split. Здесь нет большой разницы по сравнению с его ответом.

Ответ №8:

если вы добавляете некоторые объекты с расширением json, то вам также нужно обрезать пробелы … поэтому я тоже добавляю trim().

 let x = "/Controller/Action?id=11112amp;value=4444";
let result =  x.trim().substring(0,  x.trim().indexOf('?'));  
  

Комментарии:

1. Это также приведет к удалению пробелов в начале строки, чего не было в вопросе.

2. Хотя этот фрагмент кода может решить проблему, он не объясняет, почему или как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода , поскольку это действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причин вашего предложения по кодированию.

Ответ №9:

Сработало для меня:

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

Ответ №10:

Это легко можно сделать с помощью JavaScript для справки см. ссылку JS String

РЕДАКТИРОВАТЬ это легко можно как. 😉

 var url="/Controller/Action?id=11112amp;value=4444 ";
var parameter_Start_index=url.indexOf('?');
var action_URL = url.substring(0, parameter_Start_index);
alert('action_URL : ' action_URL);