Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式匹配括号内大于0的数字,如果最后一个字符为字符串_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式匹配括号内大于0的数字,如果最后一个字符为字符串

Javascript 正则表达式匹配括号内大于0的数字,如果最后一个字符为字符串,javascript,regex,Javascript,Regex,我真的不知道如何在正则表达式中执行下面的操作,你能帮我吗 我正在开发一个应用程序,可以刮取一个页面,因此我得到: ["(02335E)", "(02743M)", "(00899G)", "(02657J)", "(03330B)", "(03359M)", "(Macquarie)", "(00002J)", "(01994M)", "(00401E)", "(Australia)", "(02517K)", "(01545C)", "(03245K)", "(00168J)", "

我真的不知道如何在正则表达式中执行下面的操作,你能帮我吗

我正在开发一个应用程序,可以刮取一个页面,因此我得到:

["(02335E)", "(02743M)", "(00899G)", "(02657J)",
 "(03330B)", "(03359M)", "(Macquarie)", "(00002J)", 
 "(01994M)", "(00401E)", "(Australia)", "(02517K)", 
 "(01545C)", "(03245K)", "(00168J)", "(03258E)", 
 "(00172B)", "(02318F)", "(02778M)", "(03350J)", 
 "(00682B)", "(03265F)", "(from 354 rows)"]
当字符串以任何字符结尾(如
E
M
G
J
B
F
等)时,如何在Javascript正则表达式中仅匹配这些括号内大于零的数字

例如,在字符串中,
(02335E)
,我会得到
2335
,在字符串中,
(00682B)
,我会得到
682

谢谢你的帮助

"(02335E)".match(/^\(0*([1-9]\d*)[A-Za-z_]*\)$/)[1];
说明:

  • ^
    :字符串的开头
  • \(
    :文本左括号
  • 0*
    :零或多个零
  • ([1-9]\d*)
    :捕获一个1-9,后跟零或多个数字
  • [A-Za-z!]*
    :零个或多个单词字符(减去任何数字)
  • \)
    :文本右对齐
  • $
    :字符串的结尾
说明:

  • ^
    :字符串的开头
  • \(
    :文本左括号
  • 0*
    :零或多个零
  • ([1-9]\d*)
    :捕获一个1-9,后跟零或多个数字
  • [A-Za-z!]*
    :零个或多个单词字符(减去任何数字)
  • \)
    :文本右对齐
  • $
    :字符串的结尾

您可以在每个字符串上尝试此正则表达式:

/^\(0*([1-9][0-9]*)[A-Z]\)$/
  • ^
    :从头开始
  • \(
    :匹配第一个括号
  • 0*
    :匹配开头0s
  • [1-9][0-9]*
    :匹配非零数字(答案)
  • [A-Z]
    :匹配字符
  • \)
    :匹配右括号
  • $
    :在字符串末尾结束

第一个捕获组是您的答案。

您可以在每个字符串上尝试此正则表达式:

/^\(0*([1-9][0-9]*)[A-Z]\)$/
  • ^
    :从头开始
  • \(
    :匹配第一个括号
  • 0*
    :匹配开头0s
  • [1-9][0-9]*
    :匹配非零数字(答案)
  • [A-Z]
    :匹配字符
  • \)
    :匹配右括号
  • $
    :在字符串末尾结束
第一个捕获组是您的答案。

试试这个正则表达式: 使用的正则表达式是
\([0-9]+)\w\

试试这个正则表达式:
使用的正则表达式是
\([0-9]+)\w\

您可能不需要比以下更复杂的东西:

/[1-9][0-9]*/g
它将匹配字符串中的1-9,后跟任意数量的数字。 不需要捕获组


您可能不需要比以下更复杂的东西:

/[1-9][0-9]*/g
它将匹配字符串中的1-9,后跟任意数量的数字。 不需要捕获组


尽管您已经接受了答案,但我只是想添加这个,因为我已经解决了这个问题

此特定解决方案将向您返回一个新的过滤数据集数组。它还将过滤掉那些与“麦格理”等数字不符的数字

var数据=[“(02335E)”、“(02743M)”、“(00899G)”、“(02657J)”、“(03330B)”、“(03359M)”、“(麦格理)”、“(00002J)”、“(01994M)”、“(00401E)”、“(澳大利亚)”、“(02517K)”、“(03245K)”、“(00168J)”、“(03258E)”、“(00172B)”、“(02318F)”、“(02778M)”、“(03350J)”、“(00682B)”、“(03265F)”;
var filtered=data.map(函数(项){
返回parseInt(item.replace(/^\(\d+/,“$1”);
}).filter(num=>!isNaN(num));

console.log(过滤);
即使您已经接受了答案,我也只想添加它,因为我已经解决了这个问题

此特定解决方案将向您返回一个新的筛选数据集数组。它还将筛选出与数字不对应的数组,例如“(Macquarie)”

var数据=[“(02335E)”、“(02743M)”、“(00899G)”、“(02657J)”、“(03330B)”、“(03359M)”、“(麦格理)”、“(00002J)”、“(01994M)”、“(00401E)”、“(澳大利亚)”、“(02517K)”、“(03245K)”、“(00168J)”、“(03258E)”、“(00172B)”、“(02318F)”、“(02778M)”、“(03350J)”、“(00682B)”、“(03265F)”;
var filtered=data.map(函数(项){
返回parseInt(item.replace(/^\(\d+/,“$1”);
}).filter(num=>!isNaN(num));

console.log(已过滤);
您希望获得这些相同元素的数组,但只包含非零数字分量吗?此值如何
(00401E)
应被视为
401
41
?嗨,RomanPerekrest,它应被视为401,因为只有前两个零是无效的。您希望获得这些相同元素的数组,但只包含非零数字分量?此值如何
(00401E)
应被视为
401
41
?嗨,RomanPerekrest,它应被视为401,因为只有前两个零无效。哈哈,明白了。再次更新。谢谢!今天早上咖啡还在供应。:)非常感谢你,romellen,它很完美。我真的很努力地想出来,但我仍然需要学习很多正则表达式。似乎这上面的捕获组不是绝对必要的,不是吗?/[1-9]\d*/性能会更好吗?(使用捕获组会影响性能)哈哈,明白了。又更新了。谢谢!咖啡今天早上还在喝。:)太谢谢你了,罗梅伦,太棒了。我真的很努力地想得出这个结论,但我仍然需要学习很多正则表达式。似乎在这方面的捕获组不是严格必要的,对不对/[1-9]\d*/执行得更好?(使用捕获组记录为影响性能)