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,后跟零或多个数字([1-9]\d*)
:零个或多个单词字符(减去任何数字)[A-Za-z!]*
:文本右对齐\)
:字符串的结尾$
:字符串的开头^
:文本左括号\(
:零或多个零0*
:捕获一个1-9,后跟零或多个数字([1-9]\d*)
:零个或多个单词字符(减去任何数字)[A-Za-z!]*
:文本右对齐\)
:字符串的结尾$
/^\(0*([1-9][0-9]*)[A-Z]\)$/
:从头开始^
:匹配第一个括号\(
:匹配开头0s0*
:匹配非零数字(答案)[1-9][0-9]*
:匹配字符[A-Z]
:匹配右括号\)
:在字符串末尾结束$
第一个捕获组是您的答案。您可以在每个字符串上尝试此正则表达式:
/^\(0*([1-9][0-9]*)[A-Z]\)$/
:从头开始^
:匹配第一个括号\(
:匹配开头0s0*
:匹配非零数字(答案)[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*/执行得更好?(使用捕获组记录为影响性能)