繁体   English   中英

如何匹配 Javascript 中的 2 个单独的数字

[英]How to match 2 separate numbers in Javascript

当括号/(P|C\(\d+\,{0,1}\s*\d+\))/g中有两个数字时,我有这个应该匹配的正则表达式,例如:

C(1, 2) 或 P(2 3) //预期匹配

C(43) 或 C(43, ) // 期望不匹配

但它也匹配只有 1 个数字的那些,我该如何解决?

你有几个问题。 首先,您的正则表达式将匹配P本身或C后跟括号中的数字; 您应该将P|C替换为[PC] (您可以使用(?:P|C)[PC]性能更高,请参阅此 Q&A )。 其次,由于您的正则表达式使,和空格都是可选的,它可以匹配43而无需额外的数字( 4匹配第一个\d+3第二个\d+ )。 您需要强制字符串在数字之间包含一个,至少一个空格。 你可以用这个正则表达式做到这一点:

[PC]\(\d+[ ,]\s*\d+\)

正则表达式 101 上的演示

试试这个正则表达式

[PC]\(\d+(?:,| +) *\d+\)

点击演示

解释:

  • [PC]\( - 匹配P(C(
  • \d+ - 匹配 1+ 个数字
  • (?:,| +) - 匹配 a , 1+ 个空格
  • *\d+ - 匹配 0+ 个空格,后跟 1+ 个数字
  • \) - 匹配)

您可以通过使用\d[,\s]+\d允许命令和空格的任意组合来放松数字之间的分隔符。 测试用例:

 const regex = /[PC]\(\d+[,\s]+\d+\)/g; [ 'C(1, 2) or P(2 3)', 'C(43) or C(43, )' ].forEach(str => { let m = str.match(regex); console.log(str + ' ==> ' + JSON.stringify(m)); });

Output:

C(1, 2) or P(2 3) ==> ["C(1, 2)","P(2 3)"]
C(43) or C(43, ) ==> null

您的正则表达式应要求数字之间至少存在一个分隔符。

我想您想分别从中获取数字,例如在数字数组中:

 let tests = [ "C(1, 2)", "P(2 3)", "C(43)", "C(43, )" ]; for (let test of tests) { console.log( test.match(/[PC]\((\d+)[,\s]+(\d+)\)/)?.slice(1)?.map(Number) ); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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