Javascript 仅当条件为真时匹配
我想获得有关使用JavaScript进行正则表达式匹配的帮助Javascript 仅当条件为真时匹配,javascript,regex,validation,Javascript,Regex,Validation,我想获得有关使用JavaScript进行正则表达式匹配的帮助 仅匹配数字: 如果行(奇数)的数大于25,则行 在(偶数)之后有一个单词“苹果”。 说明: 第一行的值(29)属于第二行(“第一|可可苹果是”) 第三行的值(23)到第四行(“第二测试文本”)。。。等等 我将与之一起使用的文本: 29% OK First | Cocoa Apples are 23% NOT Second | Test Text 18% NOT Third | Mango Alpa Tango 16%
仅匹配数字:
- 如果行(奇数)的数大于25,则行
在(偶数)之后有一个单词“苹果”。
- 说明:
- 第一行的值(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
试试这个:
/(2[5-9]|[3-9][0-9])%(?=.*\n.*Apples)/g
试试这个:
/(2[5-9]|[3-9][0-9])%(?=.*\n.*Apples)/g
对于正则表达式不太确定,但我认为以下内容在查找数字和行方面做得非常好:
var str=`29%正常
首先,可可苹果是
23%不是
第二篇|测试文本
18%不是
第三|芒果阿尔帕探戈
16%不是
第四,苹果是绿色的
33%可以
第五|文本测试应用程序
10%不是
第六,苹果是金鸭子
28%可以
第七,阿尔帕苹果是探戈
66%可以
第八|哦,我的苹果是鳄梨
20%不是
第九,这是我的课文
25%不是
第十|这很难`;
var=false;
str.split(“\n”).forEach(函数(行,i){
如果(i%2==0&&parseInt(行替换(/\\D/g,“”),10)>=25){
更大=正确;
}否则{
如果(更大){
更大=错误;
if(第行索引(“苹果”)>-1){
控制台日志(“行内匹配”+i);
}
}
}
});代码>不确定正则表达式,但我认为下面的代码在查找数字和行方面做得非常好:
var str=`29%正常
首先,可可苹果是
23%不是
第二篇|测试文本
18%不是
第三|芒果阿尔帕探戈
16%不是
第四,苹果是绿色的
33%可以
第五|文本测试应用程序
10%不是
第六,苹果是金鸭子
28%可以
第七,阿尔帕苹果是探戈
66%可以
第八|哦,我的苹果是鳄梨
20%不是
第九,这是我的课文
25%不是
第十|这很难`;
var=false;
str.split(“\n”).forEach(函数(行,i){
如果(i%2==0&&parseInt(行替换(/\\D/g,“”),10)>=25){
更大=正确;
}否则{
如果(更大){
更大=错误;
if(第行索引(“苹果”)>-1){
控制台日志(“行内匹配”+i);
}
}
}
});代码>在这里,它应该按照您的要求工作
^(?:(?:.*\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”
的行
看,
注意,由于javascript中lookbehind的一些限制,捕获百分比的数量比只匹配它要方便得多
更直接的方法
(?:2[6-9]|[3-9][0-9]|100)(?=.*\n.*Apples)
我认为这种方法比第一种更简单,因为你不需要处理像“奇”或“偶”这样的花哨词汇
请参见这里的,它应该可以按照您的要求工作
^(?:(?:.*\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”
的行
看,
注意,由于javascript中lookbehind的一些限制,捕获百分比的数量比只匹配它要方便得多
更直接的方法
(?:2[6-9]|[3-9][0-9]|100)(?=.*\n.*Apples)
我认为这种方法比第一种更简单,因为你不需要处理像“奇”或“偶”这样的花哨词汇
请参阅,使用
(2[5-9]|[3-9][0-9]|100)%.*\n.*Apples.*
如果需要捕获所有文本。请使用
(2[5-9]|[3-9][0-9]|100)%.*\n.*Apples.*
如果您需要捕获所有文本。我怀疑任何正则表达式都不能比较这样的数字。您希望得到什么匹配?只有号码?第一句还是第二句?或者两者都有?@Stefan有可能,我现在了解你的情况,但你想匹配什么?我是说绳子的哪一部分。嗯,你证明我错了^^没有那样想我怀疑任何正则表达式的味道都能比较那样的数字..你想得到什么匹配?只有号码?第一句还是第二句?或者两者都有?@Stefan有可能,我现在了解你的情况,但你想匹配什么?我是说绳子的哪一部分。嗯,你证明我错了^^我没有那样想谢谢!我会试试的。谢谢!我会尝试一下。这不是我想要的“完全”,因为它匹配,如果我的任何一个条件是真的(I.25<数字II.有“苹果”在里面。有人已经在顶部完美地回答了它,但是谢谢你的帮助!已经回答了,但是谢谢!如果它不仅必须匹配一个词(“苹果”),你会如何更改你的代码,但整行?(“首先,可可苹果是”)我尝试过改变它,但因为|符号,我无法让它工作。请使用这个。(?:2[6-9]|[3-9][0-9]| 100)(?=.\n.*苹果)
,\n
是一个新行,对吗?*
是苹果之前的任何字符。所以,你应该写这个(?:2[6-9][3-9][1249]|100)(?=.\n第一个\可可苹果是)
如果在最后一个组中使用非捕获组而不是正向前瞻(?:2[6-9]|[3-9][0-9]| 100)(?:.\n第一个\可可苹果是)
您将在regex101中看到它将按照您的意愿进行匹配。但请注意
。基本上它是一个“更改操作符”。请使用\\\\
匹配字符\
。我可能建议您从internet下载regex备忘单。它非常有用。这不是我想要的“完全”,因为如果我的任何一个条件都是真的(I.25