![](/img/trans.png)
[英]how can i separate the numbers multiple by 9 in 1 to 1000 numbers using javascript?
[英]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+\)
试试这个正则表达式
[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.