2016-09-19 3 views
0

Я хотел бы получить помощь делает матч Regex в JavaScriptMatch только если условия


Матч только номер:

  • Если ряд (Odd) имеет номер , превышающий 25 И строка после (Even) имеет слово «A pieces "в нем.
    • Объяснение:
      • Значение первой строки в (29) принадлежит к второму ряду ("Первое | Какао яблоки")
      • Значение третьего ряда (в 23) до четвертый ряд («Второй тестовый текст») ... и так далее ...

текст, который я буду использовать его:

29% OK 
First | Cocoa Apples are 
23% NOT 
Second | Test Text 
18% NOT 
Third | Mango Alpa Tango 
16% NOT 
Fourth | Apples are 
33% OK 
Fifth | Text Testing App 
10% NOT 
Sixth | Apples are Gold Duck 
28% OK 
Seventh | Alpa Apples are Tango 
66% OK 
Eighth | Oh My Apples are Avocado 
20% NOT 
Ninth | This Is My Text 
25% NOT 
Tenth | This Is Hard 
+0

Я сомневаюсь, что любой аромат Regex может сравнивать такие числа. – Stefan

+0

И что бы вы хотели получить в качестве матча? Только номер? Первое предложение или второе? Или оба? –

+0

@Stefan можно –

ответ

2

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

/(2[5-9]|[3-9][0-9])%(?=.*\n.*Apples)/g 
+0

Спасибо! Я это попробую. – Enryu

1

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

var str = `29% OK 
 
First | Cocoa Apples are 
 
23% NOT 
 
Second | Test Text 
 
18% NOT 
 
Third | Mango Alpa Tango 
 
16% NOT 
 
Fourth | Apples are 
 
33% OK 
 
Fifth | Text Testing App 
 
10% NOT 
 
Sixth | Apples are Gold Duck 
 
28% OK 
 
Seventh | Alpa Apples are Tango 
 
66% OK 
 
Eighth | Oh My Apples are Avocado 
 
20% NOT 
 
Ninth | This Is My Text 
 
25% NOT 
 
Tenth | This Is Hard`; 
 

 

 
var bigger = false; 
 
str.split("\n").forEach(function(row, i) { 
 
    if (i % 2 == 0 && parseInt(row.replace(/\\D/g, ""), 10) >= 25) { 
 
     bigger = true;  
 
    } else { 
 
    if (bigger) { 
 
     bigger = false; 
 
     if (row.indexOf("Apples") > -1) { 
 
     console.log("match in line " + i); 
 
     } 
 
    } 
 
    } 
 
});

+0

Спасибо, но мне нужно было это в Regex.Appreciate помочь хотя! – Enryu

1

Здесь, он должен работать как ваш запрос

^(?:(?:.*\n){2})*?((?:2[6-9]|[3-9][0-9]|100)).*\n.*Apples 

Пояснения

^(?:(?:.*\n){2})*? матч нулевой линии или даже число линий,

((?:2[6-9]|[3-9][0-9]|100)) номер группы процент, который больше, чем 25 к переменной \1,

.*\n.*Apples матч линия, которая имеет слово "Apples".

см, DEMO

Обратите внимание, что из-за некоторых ограничений в JavaScript просмотра назад, это гораздо больше удобства, чтобы захватить количество процентов, чем просто соответствовать его.

Некоторые более простой способ

(?:2[6-9]|[3-9][0-9]|100)(?=.*\n.*Apples) 

Я думаю, что этот подход является более легким, чем первый, потому что вам не нужно иметь дело с такими причудливыми словами, как «нечетные» или «даже».

см, DEMO

+0

@ Enryu Я сделал некоторые редактирования, пожалуйста, проверьте демо. – fronthem

+0

Это не «полностью» то, что я хотел, так как он соответствует, если одно из моих условий истинно (у меня есть 25 штук №2. «Яблоки» в нем. Кто-то уже ответил на это отлично, но СПАСИБО для вашего помогите! – Enryu

+0

ОК, я закончил, пожалуйста, еще раз. – fronthem

1

Использование

(2[5-9]|[3-9][0-9]|100)%.*\n.*Apples.* 

, если вам нужно, чтобы захватить весь текст.

+0

Спасибо! Кто-то был быстрее (и мне нужно было только номерное значение (извините за то, что не заявлял об этом)), но я ценю помощь! – Enryu

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