javascript получить строку перед символом

18

У меня есть строка, и я пытаюсь извлечь символы перед цитатой.

Пример: извлечение 14 из 14 '- € 14.99

Я использую следующий код, чтобы добиться этого.

$menuItem.text().match(/[^']*/)[0]

Моя проблема в том, что если строка имеет значение примерно 0,88, я хочу вернуть пустую строку. Однако я верну полную строку 0,88 евро.

Чем я занимаюсь с матчем?

    
задан Keith Power 25.08.2012 в 20:32
источник
  • Я не совсем понимаю «проблему», которую вы описываете; если строка равна 0,88 евро, вы хотите получить пустую строку? Или, если строка равна 14 '- 0,88 евро, вам нужна пустая строка? –  David Thomas 25.08.2012 в 20:45
  • Мне нужна только строка, возвращаемая, если в ней есть цитата. Строка, которую я хочу вернуть, - это символы перед цитатой. Опять же, если нет цитаты, тогда ничего не вернулось. –  Keith Power 25.08.2012 в 20:49
  • Если всегда int или no int, тогда попробуйте var val = parseInt (str); если isNaN (val) val="" –  mplungjan 25.08.2012 в 21:07

4 ответа

32

Это то, что вы должны использовать для разделения:

string.slice(0, string.indexOf("'"));

И затем для обработки вашего случая несуществующего значения:

function split(str) {
 var i = str.indexOf("'");

 if(i > 0)
  return  str.slice(0, i);
 else
  return "";     
}

Демо на JsFiddle

    
ответ дан 3on 25.08.2012 в 20:34
источник
  • Почему бы не сохранить значение str.indexOf () в переменной, чтобы вам не пришлось дважды искать строку? –  jfriend00 25.08.2012 в 21:06
  • Почему бы не передать персонажа и сделать это многоразовым? –  yardpenalty 16.12.2016 в 11:10
5

Никто, кажется, не представил то, что мне кажется самым безопасным и самым очевидным вариантом, который охватывает каждый из случаев, о которых спрашивал ОП, поэтому я подумал, что предлагаю это:

function getCharsBefore(str, chr) {
    var index = str.indexOf(chr);
    if (index != -1) {
        return(str.substring(0, index));
    }
    return("");
}
    
ответ дан jfriend00 25.08.2012 в 21:11
источник
  • @ 3on - Я просто объяснял причину для публикации ответа после того, как уже было множество других ответов. Если вам нравится другой ответ лучше, не стесняйтесь голосовать за него. Этот ответ не был предложен в то время, когда я разместил его. Я отредактировал свой ответ, чтобы изменить формулировку. –  jfriend00 25.08.2012 в 21:43
4

попробуйте это

str.substring(0,str.indexOf("'"));
    
ответ дан nandu 25.08.2012 в 20:51
источник
  • Не обрабатывает случай, когда цитата не находится в строке. –  jfriend00 25.08.2012 в 21:01
  • @ jfriend00: взгляните на это jsfiddle.net/nandu8201/nfCs4 –  nandu 25.08.2012 в 21:11
  • Кажется, я работаю, я думаю, что это нечетное использование подстроки (), передающей -1 ей. Я бы лично не чувствовал себя комфортно с этим незаконным аргументом без тестирования в кучке браузеров. –  jfriend00 25.08.2012 в 21:20
  • на самом деле я тестировал его в IE8, FF, chrome и Opera. Это самое простое решение вопроса. –  nandu 25.08.2012 в 21:27
  • Вы можете написать код таким образом. Я предпочитаю оставаться в пределах юридических ограничений спецификаций аргументов, даже это еще несколько строк кода. –  jfriend00 25.08.2012 в 21:29
0

Вот ярлык подчеркивания в coffescript

_.mixin
  substrBefore : ->
    [char, str] = arguments
    return "" unless char?
    fn = (s)-> s.substr(0,s.indexOf(char)+1)
    return fn(str) if str?
    fn

, или если вы предпочитаете сырой javascript: Ссылка

Вы можете использовать это для создания частичного типа:

var beforeQuote = _.substrBefore("'");
var hasQuote = beforeQuote("14' - €0.88"); // hasQuote = "14'"
var noQoute  = beforeQuote("14 €0.88");    // noQuote =  ""

Или просто вызовите его непосредственно со своей строкой

var beforeQuote = _.substrBefore("'", "14' - €0.88"); // beforeQuote = "14'"

Я намеренно решил оставить символ поиска в результатах, чтобы он соответствовал его дополнению mixin substrAfter (здесь приведена демонстрация: Ссылка ). Более поздний mixin был написан как утилита для анализа запросов URL-адресов. В некоторых случаях я просто использую location.search , который возвращает строку с ведущим ? .     

ответ дан jhnstn 23.10.2013 в 03:04
источник