繁体   English   中英

使用正则表达式和 Javascript 查找括号中的数字

[英]Find numbers that are in parentheses using regular expression and Javascript

有这样一行

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

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

 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)

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

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

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

这个演示

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

 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 );

请参阅正则表达式演示

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM