javascript 正则表达式在匹配之前检查字符但不将其包含在结果中

标签 javascript regex

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

如果数字前面是:

  • 单词字符或@字符;然后不匹配任何内容
  • 其他任何事情;然后在结果中匹配数字但不包含前面的字符

我尝试过:[^@\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

最佳答案

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

See regex in use here

^[^@\w]?(\d+)
  • ^ 断言位置位于行首
  • [^@\w]? 可选择匹配除 @ 或单词字符之外的任何字符
  • (\d+) 将一个或多个数字捕获到捕获组 1

var a = ["@121", "+39", "s21", "89", "(98", "/4"]
var r = /^[^@\w]?(\d+)/

a.forEach(function(s){
  var m = s.match(r)
  if(m != null) console.log(m[1])
})

关于javascript 正则表达式在匹配之前检查字符但不将其包含在结果中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49261573/

相关文章:

javascript - 使用 Express 渲染 Base64 PNG

javascript - 如何在不使用任何库的情况下从前端和后端连接到数据库(PostgreSQL)

javascript - 禁用由 CakePHP FormHelper 生成的按钮

regex - 为什么我的 ack 正则表达式会得到额外的、意想不到的结果?

regex - Apache 重定向正则表达式 : match something that is not following something

javascript - 如何在向下滚动表格时保持表格标题固定

javascript - window.print 不打印 IE 中的所有页面

c# - 需要帮助为我的白名单制作这个正则表达式

javascript - 针对 RegExp 的 Google Closure 编译器警告

javascript - java中的正则表达式从javascript方法获取参数