求可识别带kind后缀的Fortran各类数字的JavaScript正则表达式
解决Fortran数字(含kind后缀)的JavaScript正则匹配问题
我帮你调整了正则表达式,现在可以完美匹配你提到的所有Fortran数字类型,包括带kind后缀的整数和浮点数。
最终正则表达式
const fortranNumberRegex = /(?=\b|\+|\-|\.)(?=\.\d|\d)(?:\d+)?(?:\.\d+)?(?:[de][+-]?\d+)?(?:_[a-zA-Z]+)?\b/g;
匹配范围
这个正则可以匹配以下所有类型的Fortran数字:
- 普通整数:
1、2、3、-4、+5 - 普通浮点数:
1.23、.456、789.、1.23e2、1.23d3、-4.56e-7、+8.9d+10 - 带kind后缀的整数:
12_ip、15_kp、-78_mp - 带kind后缀的浮点数:
1.23_wp、1.23e2_wp、1.23d2_wp、.456_sp、789._dp
正则各部分解释
让我拆解一下每个部分的作用,方便你理解和调整:
(?=\b|\+|\-|\.):正向预查,确保数字的起始位置是单词边界、正号、负号或者小数点,支持带符号的数字和小数点开头的数字。(?=\.\d|\d):二次正向预查,确保接下来是「小数点+数字」或者纯数字,避免单独的小数点或符号被误判为数字。(?:\d+)?:可选的整数部分,既支持完整整数(比如123),也支持小数点开头的数字(比如.456的整数位为空)。(?:\.\d+)?:可选的小数部分,匹配「小数点+至少一位数字」,避免匹配单独的小数点(比如.不会被当作有效数字)。(?:[de][+-]?\d+)?:可选的指数部分,兼容Fortran的e(单精度指数)和d(双精度指数),支持带正负号的指数(比如e-2、d+5)。(?:_[a-zA-Z]+)?:可选的kind后缀,匹配下划线后跟任意字母组合,覆盖_ip、_wp、_sp这类常见的kind后缀。\b:单词边界,确保数字(包括后缀)是一个独立的单元,不会和其他字符串粘连(比如123abc不会被误匹配)。
测试示例
你可以用这段代码测试匹配效果:
const testStrings = [ "1 2 3", "1.23 1.23e2 1.23d3", "12_ip 15_kp", "1.23_wp 1.23e2_wp 1.23d2_wp", "-4.56e-7_wp +8.9d+10_sp .123_mp" ]; testStrings.forEach(str => { console.log(`匹配字符串: "${str}"`); console.log(`匹配结果:`, str.match(fortranNumberRegex)); });
运行后会输出所有符合条件的数字,完全覆盖你提到的场景。
内容的提问来源于stack exchange,提问作者Atronoush
相关产品推荐
相关产品推荐

