Видаліть усе після певного символу


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);
 }

Відповіді:


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 Тому я додав покрокове пояснення до розділеної відповіді (щоб змінити волду).

1
LoL - Спліт може прийняти регулярний вираз так +1, якщо не використовувати спліт? LoL - Javascript використовує regex, так +1, щоб не використовувати Javascript? Як більше коду та складності можуть зробити його простим завданням? Хіба не регулярний вираз і розділення простіші та ефективніші?

294

Ви також можете використовувати split()функцію. Це здається найпростішим, що мені спадає на думку :).

url.split('?')[0]

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

Однією з переваг є те, що цей метод буде працювати, навіть якщо його немає ?в рядку - він поверне цілу рядок.


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

Це спрацює, якщо він знайде "?" і якщо цього немає


це просто видалить "?" а деякі інші в ОП не просили
Кевін

4
Це видалить усе після ?(включено)
mcont

2
НАЙКРАЩИЙ ВІДПОВІДЬ ! ОП попросив видалити ВСЕ після, ?і чітко сказано, щоб видалити ?також, сказавши: Я хочу, щоб href був / Контролер / Тільки дії

3

Якщо ви також хочете зберегти "?" і просто видалити все після цього конкретного символу, ви можете:

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

// output: /Controller/Action?

Це не працює, якщо рядок не містить?
Стефана Біджзіттера,

@StephanBijzitter Так, я знаю. Оскільки моя відповідь говорить: "якщо ви також хочете зберегти ? " - очевидно, в рядку має бути знак питання, щоб зберегти ..
patad

Дивно, здається, мій коментар був призначений для іншої відповіді від @Imran. Не знаю, чому я опублікував це на вашу відповідь.
Стефан Біцзіттер

1

Може бути дуже пізня вечірка: с

Ви можете використовувати зворотну посилання $ '

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

Це дуже добре працює для мене:

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

0

Для мене працювали:

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

-1

Це легко зробити за допомогою JavaScript для довідки, див. Посилання JS String

EDIT це можна легко зробити як. ;)

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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.