【问题标题】:Find numbers that are in parentheses using regular expression and Javascript使用正则表达式和 Javascript 查找括号中的数字
【发布时间】:2020-07-16 07:34:00
【问题描述】:

有这样一行

let str = 'ds 1,2abc{3,4}dd'

我需要找到将包含在 {} 中的数字,而无需将括号本身括起来。

例如(假设regex 是一个自定义的正则表达式)我想写如下内容。

(str.match(regexp)).join('').split(',')

这会产生这样的结果 => ['3','4']

如果括号中只有一个字符或逗号字符,我需要得到下一个结果

let str = 'ds 1,2abc{3,}dd'

(str.match(regexp)).join('').split(',') => ['3','']

目前我有这么一个常客const regexp = (/\d+\,\d*|(?<=\{)\d+/ 但它不处理字符串中有更多数字的情况,如 1,2

【问题讨论】:

  • 提取它们的常用快速方法类似于str.match(/\d+(?:\.\d+)?(?=[^{}]*})/g)。或者,/\d*\.?\d+(?=[^{}]*})/g

标签: javascript regex


【解决方案1】:

看来您实际上是在尝试在结果数组中包含一个空字符串。也许你可以使用:

var str = 'ds 1,2abc{3,4}dd';
var res = str.split(/[{}]/)[1].split(",");
console.log(res)

var str = 'ds 1,2abc{3,}dd';
var res = str.split(/[{}]/)[1].split(",");
console.log(res)

【讨论】:

    【解决方案2】:

    通常的解决方法,当打开/关闭花括号的数量匹配并且您不需要预先验证您的输入时,您可以简单地使用

    str.match(/\d+(?:\.\d+)?(?=[^{}]*})/g)
    str.match(/\d*\.?\d+(?=[^{}]*})/g)
    

    这里,\d+(?:\.\d+)?(?=[^{}]*}) 匹配 1+ 个数字,后跟一个可选的点和 1+ 个数字序列,后跟 0 个或多个除 {} 以外的字符,然后是 }

    this demo

    在更一般的情况下,您可以通过首先将花括号与逗号分隔的数字匹配来提取花括号内的数字组。然后,您可以从每个匹配项中提取数字:

    const str = 'ds 1,2abc{3,4}dd{not this one 5,6} and {7,8.666,9,10.45}';
    const rx = /{\d*\.?\d+(?:,\d*\.?\d+)*}/g;
    const results = str.match(rx).map(x => x.replace(/[{}]+/g,'').split(','));
    console.log( results );

    请参阅regex demo

    • { - 一个 { 字符
    • \d*\.?\d+ - 0 个或多个数字后跟可选的 .,然后是 1+ 个数字
    • (?:,\d*\.?\d+)* - 逗号重复 0 次或更多次,后跟 0 位或更多位数字,后跟可选的 .,然后是 1+ 位数字
    • } - { 字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 2015-08-26
      • 2011-04-05
      • 2015-10-13
      • 1970-01-01
      • 2020-10-29
      相关资源
      最近更新 更多