javascript正则表达式在匹配前检查字符,但不检查';不要把它包括在结果中

javascript正则表达式在匹配前检查字符,但不检查';不要把它包括在结果中,javascript,regex,Javascript,Regex,我试图在一个正则表达式中实现以下两个规则: 如果一个数字前面有: 一个单词字符或@字符;那么什么都不匹配 其他任何东西;然后匹配数字,但不要在结果中包含前面的字符 我试过:[^@\d\w]\d+和(?:[^@\d\w])\d+ 它解决了第一条规则,但未能解决第二条规则,因为它在结果中包含了运算符 我理解为什么它不能按预期工作;[^@\d\w]部分显式表示不匹配@或单词字符前面的数字,因此它隐式表示在结果中包含任何其他内容。问题是我仍然不知道如何解决这个问题 有没有办法在一个正则表达式中实现这

我试图在一个正则表达式中实现以下两个规则:

如果一个数字前面有:

  • 一个单词字符或@字符;那么什么都不匹配
  • 其他任何东西;然后匹配数字,但不要在结果中包含前面的字符
我试过:
[^@\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

按照下面的片段所示,捕获您正在寻找的结果

  • ^
    在行首断言位置
  • [^@\w]?
    可以选择匹配除
    @
    或单词字符以外的任何字符
  • (\d+)
    将一个或多个数字捕获到捕获组1中
var a=[“@121”、“+39”、“s21”、“89”、“98”、“4”]
变量r=/^[^@\w]?(\d+)/
a、 forEach(函数){
var m=s.match(r)
如果(m!=null)console.log(m[1])

})
按照下面的片段所示,捕获您正在寻找的结果

  • ^
    在行首断言位置
  • [^@\w]?
    可以选择匹配除
    @
    或单词字符以外的任何字符
  • (\d+)
    将一个或多个数字捕获到捕获组1中
var a=[“@121”、“+39”、“s21”、“89”、“98”、“4”]
变量r=/^[^@\w]?(\d+)/
a、 forEach(函数){
var m=s.match(r)
如果(m!=null)console.log(m[1])
})
我想这就是你要寻找的消极落后:

let-arr=
['@121',//不匹配
“+39”,//匹配,但不包括+登录结果
“s21”,//不匹配
'89',//匹配
“(98)”//匹配,但不包括(在结果中)
“/4”//匹配,但结果中不包括/运算符
];
console.log(arr.map(v=>v.match)(/(?有一个负查找,我想这就是您要查找的:

let-arr=
['@121',//不匹配
“+39”,//匹配,但不包括+登录结果
“s21”,//不匹配
'89',//匹配
“(98)”//匹配,但不包括(在结果中)
“/4”//匹配,但结果中不包括/运算符
];

console.log(arr.map(v=>v.match(/)(当你说“在结果中”时,它是作为捕获组实现的,还是要求它应该是整个匹配?因为捕获数字很容易解决这个问题:
[^@\d\w](\d+)
将为您提供整个匹配中的字符,但仅提供Capture中的数字您是否要替换某些内容?[^@\d\w]部分明确表示不匹配@或单词字符前面的数字…不,它表示字符集中未包含的任何字符数。顺序不重要。当您说“在结果中”时,它可以实现为捕获组吗,或者它必须是整个匹配项吗?因为捕获数字很容易解决这个问题:
[^@\d\w](\d+)
将为您提供整个匹配项中的字符,但只有捕获项中的数字您想替换什么吗?[^@\d\w]部分明确表示不匹配@或单词字符前面的数字…不,它表示字符集中不包含的任何字符数。顺序不重要。我认为最后一行应该是粗体。谢谢!如果这个建议已经得到更广泛的支持,它肯定是我要找的。不幸的是,我将不得不选择在此之前搜索另一个解决方案我认为最后一行应该是粗体的。谢谢!如果这个方案已经有了更广泛的支持,那么它肯定会是我想要的。不幸的是,在那之前我将不得不搜索另一个解决方案。谢谢。我实际上希望有一个只使用正则表达式的解决方案,因为我将无法像没有正则表达式时那样拆分字符串重构相当一部分代码。如果我没有其他选择,我会这样做,但真的没有其他方法可以直接从regex获得结果而不使用捕获组访问所需的结果吗?@Hal_9100 JavaScript regex目前只支持Chrome 62+中的lookbehinds(如MinusFour的回答所示),所以现在唯一的方法是使用捕获组。谢谢。我实际上希望有一个只使用正则表达式的解决方案,因为如果不重构大部分代码,我将无法像您那样拆分字符串。如果我没有其他选择,我会这样做,但真的没有其他方法可以直接从正则表达式获得结果而不使用捕获吗访问所需结果的组?@Hal_9100 JavaScript正则表达式目前只支持Chrome 62+中的lookbehinds(如MinusFour的回答所示),因此现在唯一的方法是使用捕获组。
^[^@\w]?(\d+)