如何从此正则表达式模式获取以下用例的匹配项?

How to get the match for the following use cases from this regex pattern?

我有匹配以下模式的正则表达式,

Link 到用例:https://regex101.com/r/wnp1k4/1

如何通过修改正则表达式来获得相同的匹配项?请帮忙

(?:^|(?<=[\D;a-zA-Z(),.:;?!"'`>]))(?!000|666|9)(?<![Oo][Rr][Dd][Ee][Rr].)(?<![Oo][Rr][Dd][Ee][Rr]..)(?<![Oo][Rr][Dd][Ee][Rr]...)(?<![Oo][Rr][Dd][Ee][Rr].[Nn][Uu][Mm][Bb][Ee][Rr].)(?<![Oo][Rr][Dd][Ee][Rr].[Nn][Uu][Mm][Bb][Ee][Rr]..)(?<![Oo][Rr][Dd][Ee][Rr].[Nn][Uu][Mm][Bb][Ee][Rr]...)(?<![Xx])\d{3}[ -.=\n\r]{0,10}(?!00)\d{2}[ -.=\n\r]{0,10}(?!0000)\d{4}(?:$|(?=[\Da-zA-Z(),.:;?!"'`<= ]))

如果 'X or x' 位于订单号之前,则不应检测到订单号。所以这工作正常。

x123456789

X123456789

x123-456-789

X123-456-789

123-456-789

需要修改正则表达式模式以匹配如下所示的订单号列表...连同单词(订单号)应该不区分大小写。

订单号123-456-789

订单号123-456789

订单号123456789

123-456789

123456789

订单号-123456787

订单号 - 123456789

订单号#123456789

订单号任意字符123456789

试试这个。

^([^x]|(order\s?number\s?)(\s?[-|#]?\s?))(anysplcharacter)?([\d-]+)$

还有其他情况吗?

正在将我的评论转换为答案,以便未来的访问者可以轻松找到解决方案。

您可以使用这个正则表达式:

(?<!\d)(?!000|666|9)(order\W?number)?\W*(?<!x)\d{3}[ .=-]{0,10}(?!000)\d{3}[ .=-]{0,10}(?!000)\d{3}

RegEx Demo

正则表达式详细信息:

  • (?<!\d): 确保前一个字符不是数字
  • (?!000|666|9):确保我们在下一个位置没有0006669
  • (order\W?number)?:匹配 ordernumber 可选地用 non-word 字符分隔
  • \W*:匹配0个或更多non-word个字符
  • (?<!x):确保前一个字符不是 x
  • \d{3}: 匹配3个数字
  • [ .=-]{0,10}:匹配给定分隔符的 0 到 10 个实例
  • (?!000):确保我们在下一个位置没有000
  • \d{3}: 匹配3个数字
  • [ .=-]{0,10}:匹配给定分隔符的 0 到 10 个实例
  • (?!000):确保我们在下一个位置没有000
  • \d{3}: 匹配3个数字

/((?<key>order\s*number).*)?(?<!x)(?<value>\d{9}|\d{3}-\d{6}|\d{3}-\d{3}-\d{3})/gim

const multilineSample = `x123456789
X123456789
x123-456-789
X123-456-789

123-456-789

ordernumber123-456-789
order number123-456789
order number 123456789

123-456789
123456789

ordernumber-x123456787

ordernumber-123456787
ordernumber - 123456789
ordernumber #123456789
ordernumber *anysplcharacter*123456789
ordernumber !@#$%^&123456789

ordernumber !@#$%^&x123456789`;

const regXOrderNumber =
  // see ... [https://regex101.com/r/wnp1k4/6]
  /((?<key>order\s*number).*)?(?<!x)(?<value>\d{9}|\d{3}-\d{6}|\d{3}-\d{3}-\d{3})/gim;

console.log(
  'all results each with its mapped named capture group ...',
  Array.from(
    multilineSample.matchAll(regXOrderNumber)
  )
  .map(({ groups }) => groups)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }