[英]javascript regex to exclude a pattern only if another pattern does not match
[英]Javascript regex that matches one pattern in string but exclude another
我需要匹配两个可能的字符串:
+/- 90000
和
+9000 / -80000
我需要分别识别这两种模式,因此为此编写了一些正则表达式。 我可以匹配的第一个单个数字字符串如下所示:
/\+\/\-{1}/g
我第二次写了这个:
/(\+(?=[0-9]+){1}|\-(?=[0-9]+){1}|\/(?=\s){1})/g
第二个也将部分匹配第一个第一个数字,即-90000。 有没有一种可以改进它们以使其完全匹配的方法?
您可以使用一个表达式:
^(?:(\+\/-\s*\d+)|((\+\s*\d+)\s*\/\s*(-\s*\d+)))$
您必须使用的唯一限制是,在第二种输入类型中,正数应该放在第一位。
你会得到在匹配组matches[1]
如果输入是1型的,并且在matches[2]
如果它是类型2。对于类型2输入的,每个数字的进一步匹配被存储在matches[3]
和matches[4]
。
您可以在regex101上看到演示 。
这是两个语义稍有不同的解决方案。
对于第一个,如果字符串是类型1,则数字将位于捕获组1( result[1]
)中;如果是类型2,则数字将位于捕获组2和3中(捕获组1将为null
)。 那么类型1的测试就是result[1] !== null
。
var a = '+/-90000';
var b = '+9000 / -80000';
var result;
var expr1 = /\+(?:\/-(\d+)|(\d+) \/ -(\d+))/;
result = a.match(expr1);
// => [ '+/-90000', '90000', null, null ]
result = b.match(expr1);
// => [ '+9000 / -80000', null, '9000', '80000' ]
在第二个字符串中,如果字符串是类型1,则数字将在捕获组1中(捕获组2为null
),如果类型是2,则数字将在捕获组2和3中进行。类型1的测试为result[1] === null
。
var expr2 = /\+(\d+ )?\/ ?-(\d+)/;
result = a.match(expr2);
// => [ '+/-90000', null, '90000' ]
result = b.match(expr2);
// => [ '+9000 / -80000', '9000', '80000' ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.