2016-11-23 3 views
0

я получил первенствовать с тысячами строк, как:Простые регулярные выражения превосходят экстракцию

Basic medical supply - AIT - needs documents from trasnport - drugs 
Basic medical supply - TTT - needs documents from trasnport - patiens and other stuff 
random string from excel - TTP - other text like always - marijuana per rectum 

Как установить регулярное выражение взять строки после 3-го «-» характер. В этом примере «наркотики», «patiens and other stuff» и «марихуана для прямой кишки».

Это не может быть сделано в jQuery и т. Д., Чтобы быть чистым JS becasue Я пишу его в Pentago BI. Эти строки будут очень случайными, только 3 символа «-» являются константами. Можно ли это сделать? Может быть, взять все на 3-й «-» срез, а затем сохранить в переменной все оставшееся и обрезать пробелы и буквенные символы?

EDIT:

Я только заметил, что в файлах каждый второй строки в этой колонке есть продукты код:

550-1008-000000-405.02.04.03 

Что я должен разделить тоже на эк 550-1028 и 405.02.04.03 так я должен удалить эти нули на середине строки и получить 2 подстроки

+0

вы можете попробовать это Withour регулярное выражение для каждой строки («Базовое медицинское снабжение - AIT - нужны документы от транспортных потоков - наркотики»). сплит ("-") [3] .trim(); –

+0

costName = Hospital.getString(); costName = costName.toString(); costName = costName.split ("-) [3] .trim(); – Buckethead

+0

Не работает на нем должно быть смешение со следующими строками, но его ближе;) Спасибо – Buckethead

ответ

0

Если вы действительно хотите, регулярное выражение, вы можете использовать это:

var s = 'Basic medical supply - AIT - needs documents from trasnport - drugs'; 
var regex = /[^-]+-[^-]+-[^-]+-(.*)/; 
var match = regex.exec(s); 
console.log(match[1]); //outputs "drugs" 

Но я предпочел бы решение от @VinodLouis (в комментариях) без использования регулярных выражений ...

+0

Все, что работает almoast, но я написал в редактировании другую вещь, которая должна быть включая – Buckethead

+1

@Touche Как вы видите на других ответах (которые игнорируют проблему с продуктом тоже), не стоит добавлять другие условия позже. Предлагаю удалить текст редактирования и открыть другой вопрос. – gus27

2

регулярное выражение может быть просто /^.+-.+-.+-\s*([^-]+)\s*$/

или еще проще: /-\s*([^-]+)\s*$/

все после того, как последний "-". Или эта строка может содержать «-»?

1

следующее регулярное выражение делает трюк:

^([^-]+-){3}(.*) 

Результат находится в $2, поэтому автономный фрагмент кода будет выглядеть следующим образом:

var s = [ 
      'Basic medical supply - AIT - needs documents from trasnport - drugs' 
     , 'Basic medical supply - TTT - needs documents from trasnport - patiens and other stuff' 
     , 'random string from excel - TTP - other text like always - marijuana per rectum' 
    ] 
    , res 
    , i; 

for (i=0; i < s.length; i++) { 
    res = s[i].replace(/^([^-]+-){3}(.*)/g, "$2"); 
    console.log ("#" + i + ": '" + s[i] + "# -> '" + res + "'\n"); 
} 

live test на регулярное выражение 101.

Пояснение

Регулярное выражение основано на последовательности произвольных символов, кроме -, прицепной одним -. Это соответствует 3 последовательных вхождений этой последовательности оснований, и присваивает остаток от линии, чтобы захватить группу 2.

Caveat

Остерегайтесь последовательных - символов - это решение не совместима с такими строками и надлежащим образом для обработки данных, которые могут зависеть от ваших данных (например, может быть -- в виде ascii представления штриха ?).

0

Это работает просто без времени принимать регулярное выражение

var s = [ 
 
      'Basic medical supply - AIT - needs documents from trasnport - drugs' 
 
     , 'Basic medical supply - TTT - needs documents from trasnport - patiens and other stuff' 
 
     , 'random string from excel - TTP - other text like always - marijuana per rectum' 
 
    ]; 
 

 
s.forEach(function(el){ 
 
    console.log(el.split("-")[3].trim()); 
 
});

Смежные вопросы