我正在使用正则表达式
^\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/