仅在条件为真时匹配

时间:2016-09-19 17:08:43

标签: javascript regex validation

我想帮助您在JavaScript中进行正则表达式匹配

仅匹配数字:

  • 如果(奇数)的数字大于25 行 在(偶数)后面有“苹果”这个词。
    • 说明
      • 第一行的值(29)属于第二行(“First | Cocoa Apples are”)
      • 第三行的值(23)到第四行(“Second | Test Text”) ...等等......

我将使用的文字:

{{1}}

4 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:1)

不确定正则表达式,但我认为以下内容在查找数字和行方面做得非常好:



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 );  
      }
    }
  }
});




答案 2 :(得分: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中的lookbehind存在一些限制,因此捕获百分比数比获取它更方便。

更直接的方式

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

我认为这种方法比第一种方法更容易,因为你不需要处理像#34; odd&#34;这样的花哨字样。或者&#34;偶数&#34;。

DEMO

答案 3 :(得分:1)

使用

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

如果您需要捕获所有文本。