You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求可识别带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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:20:06