如何从此正则表达式模式获取以下用例的匹配项?
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}
正则表达式详细信息:
(?<!\d)
: 确保前一个字符不是数字
(?!000|666|9)
:确保我们在下一个位置没有000
或666
或9
(order\W?number)?
:匹配 order
和 number
可选地用 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; }
我有匹配以下模式的正则表达式,
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}
正则表达式详细信息:
(?<!\d)
: 确保前一个字符不是数字(?!000|666|9)
:确保我们在下一个位置没有000
或666
或9
(order\W?number)?
:匹配order
和number
可选地用 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; }