2015-03-24 2 views
0

Это разбивает строку, как хотелось, но не держать Seperator:Split Строка с Regex, Keep Seperator

"200 g Joghurt".split(/[0-9]?\s?[–|-]?\s?[0-9]+\s?g{0,1}\b/) 
["", " Joghurt"] 

У меня есть случаи, как этот

  • 100-200г
  • 1g
  • 240 - 1500 г

В этой ветке предлагается t o используйте положительный взгляд вперед. Javascript and regex: split string and keep the separator

Но если я положил его в нем распадается на много:

"200 g Joghurt".split(/(?=[0-9]?\s?[–|-]?\s?[0-9]+\s?g{0,1}\b)/) 
["2", "0", "0 g Joghurt"] 

Вопрос: Как разделить эту строку выше (число может быть любое количество, Joghurt может быть любое слово) после цифр и г. , например.

["200-400g", "joghurt"] 

EDIT: Есть случаи, когда я не имею г, например,

  • 1 песня
  • песня
  • майкл джексон песня

Так что соответствие с г не работает. Случаями, которые я приводил в примерах, являются случаи с g. И g всегда сочетается с одним числом или диапазоном чисел. Прошу прощения за путаницу. Я хочу разделить ингредиенты рецепта на ингредиент и количество. G - грамм, возможно, это делает использование более понятным.

EDIT 2: Я также изменил его немного, регулярное выражение в основном работает, как вы можете видеть в этом примере: https://regex101.com/r/rL7hY9/1 Но это не разделить его на весь блок. У меня также есть эта проблема с другими случаями регулярного выражения, совпадение в regex101 - это целая группа. Но .split() не разбивает его в одной части (с положительным взглядом).

+0

https://regex101.com/r/fB6jO3/2? Что-то вроде этого? Я использовал группы захвата .... – sinisake

+3

wait, как '200 g Joghurt' становится' ["200-400g", "joghurt"] '? – Jamiec

+0

На самом деле, что же нужно выводить здесь вообще? 1) количество/масса + 2) ингредиент? – sinisake

ответ

0

Если у вас всегда есть «g», вы можете использовать это и повторно добавить «g» в первый элемент массива. Это может быть проще, чем пытаться создать какой-то обширный RegEx. Если это нужно только RegEx, вы, вероятно, захотите сопоставить пространство с отрицательным lookbehind для «g». Однако Lookbehinds доступны не во всех двигателях RegEx.

+0

Это точно проблема. Извините, что не упоминал об этом. Это всего лишь 1 из 50 случаев регулярных выражений, которые я должен фильтровать. Есть случаи без g. –

0

Вы можете использовать это регулярное выражение - (?!\s*g)\s. Мы сопрягать пространство, которое предшествует с "г":

alert("200 g Joghurt".split(/(?!\s*g)\s/))

+0

Извините за недоразумение, поставьте, пожалуйста, правильное изображение. –

0

Ok я нашел ответ. Первая ссылка stackoverflow, опубликованная мной, показала положительный результат. Но это проще, чем это, вам просто нужно разместить регулярное выражение выражение в скобках:

"200 g Joghurt".split(/([0-9]+\s?[–|-]?\s?[0-9]*\s?g{0,1}\b)/gi) Javascript - string.split(regex) keep separators После этого я удалить пустые строки и пробелы.

Другим обходным решением, которое я создал, является. Сначала используйте .match, это поставляет совпадающее регулярное выражение, а затем использует .split, который сокращает часть регулярного выражения. Это легко, если нет global flag.