繁体   English   中英

JavaScript 正则表达式中单词的多个 OR 条件

[英]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ı这个词也可以是nonumara或任何数字。 这就是我所做的。

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)匹配nonumara
    • | 或者
    • [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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM