Если вы не можете использовать любой CSV парсер и ограничивается только регулярное выражение, я хотел бы предложить 2 регэкспы.
Это можно использовать, чтобы захватить каждый символ от начала до первой схеме optional spaces
+ digits(s)
+ .
+ digit(s)
:
^([\s\S]*?)\s*\d+\.\d+
См demo
В случае, если значение с плавающей точкой находится на конец колонны, используйте якорь $
(конец строки):
^([\s\S]*?)\s*\d+\.\d+$
См. another demo
Обратите внимание, что [\s\S]
соответствует любому символу, даже новой строке. Разбивка
Regex:
^
- начало строки
([\s\S]*?)
- (Захват группы 1) любые символы, 0 или больше, как можно иначе, 3
из 30.45
будут захвачены)
\s*
- 0 или более пробелов, как можно больше (для отделки группы 1)
\d+\.\d+
- 1 или более цифр, за которыми следует период, за которым следует 1 или m рудные цифры
$
- конец строки.
Если вы планируете сопрягать любые поплавки, как -.05
, вам нужно будет заменить \d+\.\d+
с [+-]?\d*\.?\d+
.
Вот как это можно использовать:
var str = 'DuraFlexHose Water 1/2" hex 300mm 300.00';
var res = str.match(/^([\s\S]*?)\s*\d+\.\d+/);
if (res !== null) {
document.write(res[1]);
}
Вы можете использовать '^ \ Ь \ d + \ \ d +' и использование захвачена группа # 1 – anubhava
(+.?). Спасибо @anubhava, что работает, но я пытаюсь пройти через это, чтобы понять это. –
Разве вы не можете разделить строку пробелом (или вкладкой) и объединить назад все, кроме последних элементов? Какой язык вы используете? Если смотреть вперед, результат будет «чище»: ['^. *? (? = \ S * \ d + \. \ D + $)'] (https://regex101.com/r/mD3bS1/2). Или это CSV? Затем используйте считыватель CSV. –