我正在尝试在单个正则表达式中实现以下两个规则:
如果数字前面是:
我尝试过:[^@\d,\w]\d+
和(?:[^@\d,\w])\d+
解决了第一条规则,但未能解决第二条规则,因为它在结果中包含了运算符。
我理解为什么它不按预期工作; [^@\d\w]
部分明确表示不匹配@或字符前面的数字,因此它隐含地表示在结果中包含任何其他内容。问题是我仍然不知道如何解决这个问题。
有没有办法在单个正则表达式中实现这两个规则?
输入字符串:
@121 //do not match
+39 //match but don't include the + sign in result
s21 //do not match
89 //match
(98 //match but don't include the ( in result
/4 //match but don't include the / operator in result
预期结果:
39 //operator removed
89
98 //( removed
4 //operator removed
答案 0 :(得分:2)
捕获您正在寻找的结果,如下面的代码段所示。
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<RuntimeFrameworkVersion>2.0.5</RuntimeFrameworkVersion>
<IsServiceFabricServiceProject>True</IsServiceFabricServiceProject>
</PropertyGroup>
^[^@\w]?(\d+)
在行首处断言位置^
可选择匹配除[^@\w]?
或字符@
将一个或多个数字捕获到捕获组1
(\d+)
答案 1 :(得分:1)
有a finished proposal的负面观察,我认为这就是你要找的东西:
let arr =
['@121', //do not match
'+39', //match but don't include the + sign in result
's21', //do not match
'89', //match
'(98', //match but don't include the ( in result
'/4' //match but don't include the / operator in result
];
console.log(arr.map(v => v.match(/(?<![@\w])\d+/)));
然而,这是一个前沿的特征(我认为在62+铬上工作)。