javascript 正则表达式 向后查找

标签 javascript regex

我正在使用正则表达式

^\d{1,2}\.\d{1,3}(\([a-z]\))?(\(\d\))?$ 

匹配 (a)(6),(b)(4) 等值 这很好用。但我需要测试 (a) 是否为 true,但 (3) 应该返回 false。 我想要类似的东西

^\d{1,2}\.\d{1,3}(\([a-z]\))?(?(-1)\(\d\))?$ 

我在某处读到JavaScript不支持lookbehind。 我需要匹配如下模式。

  • 23.456 -> 正确
  • 23.346(f) -> 正确
  • 23.378(5) -> 假
  • 23.214(b)(7) -> 正确

感谢您提前提供的帮助。

最佳答案

我认为这样的东西可能适合你:

^\d{1,2}[.]\d{1,3}([(][a-z][)]([(][0-9][)])?)?$

请注意,我更喜欢 [.] 语法,而不是默认的转义 \. 语法。

图例 Online Demo

^\d{1,2}[.]\d{1,3} # this may be also [\d.] if you don't care about structure
(                  # START GROUP 1
  [(][a-z][)]      # A lowercase letter inside round bracket
  (                # START GROUP 2
    [(]\d[)]       # A digit inside round bracket
  )?               # END GROUP 2: make it optional
)?                 # END GROUP 1: make it optional
$                  # End of the string

现场演示

// Add /i at bottom to make the regex it case insensitive
var re = /^\d{1,2}[.]\d{1,3}([(][a-z][)]([(][0-9][)])?)?$/; 

var tests = ['23.456','23.346(f)','23.378(5)','23.214(b)(7)'].reverse();
var m;

while( t = tests.pop() ) {
    document.write('"' + t + '"<br/>');
    document.write('Valid? ' + ( (t.match(re)) ? '<font color="green">YES</font>' : '<font color="red">NO</font>') + '<br/><br/>');
}

关于javascript 正则表达式 向后查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35702159/

相关文章:

javascript - HTML5 DragOver 限制

javascript - 禁用字段集无法按预期工作

javascript - 这个范围在一个简单的 React 组件中

python - 根据正则表达式中的第一个匹配项(而不是源中的匹配项)优先考虑正则表达式中的 OR Pipe?

php - 正则表达式匹配固定单词的任何大写或小写字母

javascript - 如何通过 aurelia-cli 在 Aurelia 中使用 Froala 编辑器

javascript - d3 堆积条形图 - 从 y0 开始,而不是 yMax

javascript - 匹配所有空格的正则表达式,除了?

javascript - 通过正则表达式拆分 JS 字符串?

javascript - 匹配字符串中至少 1 个数字和 1 个字符的正则表达式模式