【问题标题】:extract a number starting from some fix number from a given string using Regex expression使用正则表达式从给定字符串中提取从某个固定数字开始的数字
【发布时间】:2021-05-07 16:31:02
【问题描述】:

我想从一个由字母和数字混合而成的字符串中提取一个数字。 例如:

string1 = "1901920100153 abcx"
string2 = "123 1901920100159 abcdf"
string3 = "--> + - asdj 1901920100123 yuman"

现在我只想从上述字符串中提取 13 位数字,从 1901920100(10 位)开始,最后三位可以更改为 1901920100153(13 位)、1901920100159(13 位)、1901920100123

我试过正则表达式 string.match(/(\d+)/) 但它从 string2 中提取 123 我根本不想要。 请帮我找到正则表达式。谢谢

【问题讨论】:

  • 使用1901920100\d{3}\b1901920100\d{3}\b,见regex101.com/r/RapNnJ/1
  • 非常感谢,\b 是什么意思?
  • \b 是一个单词边界。
  • 嘿,如果我的字符串是这样的“abc1901920100153mad”这个表达式返回null,如果数字带有字母,有没有办法从这些类型的字符串中提取?谢谢
  • 为什么?正则表达式(第一个)有效,请参阅this demo。或者你的意思是你想要(?<!\d)1901920100\d{3}(?!\d)?见this demo

标签: javascript regex string


【解决方案1】:

要匹配以固定值开头然后有 X 位数的某个数字,您可以使用基本模式,如

1901920100\d{3}

如果要确保数字的两端没有数字,可以使用

(?<!\d)1901920100\d{3}(?!\d)

请参阅regex demo #1demo #2

由于第二个正则表达式包含并非所有 JS 环境都普遍支持的后向表达式,您可以将其重写为 (?:^|\D)(1901920100\d{3})(?!\d) 并获取第 1 组值。

JavaScript 演示:

var strings = [ "1901920100153 abcx", "123 1901920100159 abcdf", "--> + - asdj 1901920100123 yuman" ];
var fixed_part = "1901920100";
var regex = new RegExp(fixed_part + "\\d{3}", "g");
for (var i=0; i<strings.length; i++) {
  console.log(strings[i], '=>', strings[i].match(regex));
}

符合 ECMAScript 2018+ 的正则表达式,带有后视演示:

const strings = [ "1901920100153 abcx", "123 1901920100159 abcdf", "--> + - asdj 1901920100123 yuman" ];
const fixed_part = "1901920100";
const regex = new RegExp(String.raw`(?<!\d)${fixed_part}\d{3}(?!\d)`, "g");
for (var text of strings) {
    console.log(text, '=>', text.match(regex));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2016-11-14
    相关资源
    最近更新 更多