[英]Multiple OR conditions for words in JavaScript regular expression
我试图在两个词之间找到一个正则表达式,但这些词不是确定的。
2015ÖĞLEYEMEKKARTI(2016-20.AdıMEVLÜTSoyadıERTANĞASınıfıE10/ENo303
这是我的文字。 我试图在Soyadı
和Sınıfı
之间找到这个词,在这种情况下是ERTANĞA
,但Sınıfı
这个词也可以是no
、 numara
或任何数字。 这就是我所做的。
soyad[ıi](.*)S[ıi]n[ıi]f[ıi]|no|numara|[0-9]
[ıi]
是针对土耳其语字符问题的,别介意。
您可以使用以下内容:
/.*Soyad(ı|i)|S(ı|i)n(ı|i)f(ı|i).*|no.*|numera.*|[0-9]/gmi
这是我处理过的链接: https : //regex101.com/r/QXLjLF/1
在JS代码中:
const regex = /.*Soyad(ı|i)|S(ı|i)n(ı|i)f(ı|i).*|no.*|numera.*|[0-9]/gmi;
var str = `2015ÖĞLEYEMEKKARTI(2016-20.AdıMEVLÜTSoyadıERTANĞASınıfıE10/ENo303`;
var newStr = str.replace(regex, '');
console.log(newStr);
这可能会做到
const str = `2015ÖĞLEYEMEKKARTI(2016-20.AdıMEVLÜTSoyadıERTANĞASınıfıE10/ENo303 2015ÖĞLEYEMEKKARTI(2016-20.AdıMEVLÜTSoyadıERTANĞAnumaraE10/ENo303 2015ÖĞLEYEMEKKARTI(2016-20.AdıMEVLÜTSoyadıERTANĞAnoE10/ENo303` const re = /(?:Soyad(ı|i))(.*?)(?:S(ı|i)n(ı|i)f(ı|i)|no|numara)/gmi console.log([...str.matchAll(re)].map(x => x[2]))
ES5
const str = `2015ÖĞLEYEMEKKARTI(2016-20.AdıMEVLÜTSoyadıERTANĞASınıfıE10/ENo303 2015ÖĞLEYEMEKKARTI(2016-20.AdıMEVLÜTSoyadıERTANĞAnumaraE10/ENo303 2015ÖĞLEYEMEKKARTI(2016-20.AdıMEVLÜTSoyadıERTANĞAnoE10/ENo303` const re = /(?:Soyad(ı|i))(.*?)(?:S(ı|i)n(ı|i)f(ı|i)|no|numara)/gmi const res = [] let match; while ((match = re.exec(str)) !== null) res.push(match[2]) console.log(res)
您可以使用单个捕获组来获取单词ERTANĞA
,保留字符类[ıi]
而不是使用替代(ı|i)
并使用非捕获组(?:
soyad[ıi](.+?)(?:S[ıi]n[ıi]f[ıi]|n(?:o|umara)|[0-9])
soyad[ıi]
匹配soyadı
或soyadi
(.+?)
捕获组 1 ,尽可能匹配 1 个或多个字符(?:
非捕获组
S[ıi]n[ıi]f[ıi]
匹配S
,然后匹配ı
或i
等。|
或者n(?:o|umara)
匹配no
或numara
|
或者[0-9]
匹配一个数字 0-9)
关闭非捕获组请注意,您不需要/m
标志,因为模式中没有锚点。
const regex = /soyad[ıi](.+?)(?:S[ıi]n[ıi]f[ıi]|n(?:o|umara)|[0-9])/gi; const str = "2015ÖĞLEYEMEKKARTI(2016-20.AdıMEVLÜTSoyadıERTANĞASınıfıE10/ENo303\\n"; console.log(Array.from(str.matchAll(regex), m => m[1]));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.