Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 为什么以下字符串中大于17的值匹配?_Javascript_Regex - Fatal编程技术网

Javascript 为什么以下字符串中大于17的值匹配?

Javascript 为什么以下字符串中大于17的值匹配?,javascript,regex,Javascript,Regex,为什么大于17的值在以下字符串中匹配 "1,2,17,18,19,181111".match(/^\b((1[0-7]|[1-9])\,?)+$/g ) 可以使用非正则表达式解决方案 var inputStr = "1,2,17,18,19,181111"; var output = inputStr.split( "," ).filter( s => +s <= 17 ); var inputStr=“1,2,17,18,19181111”; var output=i

为什么大于17的值在以下字符串中匹配

    "1,2,17,18,19,181111".match(/^\b((1[0-7]|[1-9])\,?)+$/g )

可以使用非正则表达式解决方案

var inputStr = "1,2,17,18,19,181111";

var output = inputStr.split( "," ).filter( s => +s <= 17 );
var inputStr=“1,2,17,18,19181111”;

var output=inputsr.split(“,”).filter(s=>+s+s可以使用非正则表达式解决方案

var inputStr = "1,2,17,18,19,181111";

var output = inputStr.split( "," ).filter( s => +s <= 17 );
var inputStr=“1,2,17,18,19181111”;
变量输出=inputStr.split(“,”).filter(s=>+s+s
var inputStr=“1,2,17,18,19181111”;
const output=inputStr.split(',')。filter(number=>parseInt(number)<17)。join(',');
console.log(输出)
var inputStr=“1,2,17,18,19181111”;
const output=inputStr.split(',')。filter(number=>parseInt(number)<17)。join(',');

log(输出)
刚才,Perl标记还在那里

$ perl -wE '$s = "1,2,17,18,19,181111";
            say $1 while $s =~ /\G(1[0-7]|[1-9])(?:,|$)/g'
1
2
17

\G匹配上一个匹配停止的位置,因此您不能跳过1811并匹配最后的11个。

刚才,Perl标记仍然存在

$ perl -wE '$s = "1,2,17,18,19,181111";
            say $1 while $s =~ /\G(1[0-7]|[1-9])(?:,|$)/g'
1
2
17

\G匹配上一个匹配停止的位置,因此您不能跳过1811并匹配最后的11。

您要查找的正则表达式如下所示:

(?<=^|,)(1[0-7]|\d)(?=,|$)

(?您要查找的正则表达式如下所示:

(?<=^|,)(1[0-7]|\d)(?=,|$)

(?您的正则表达式非常接近,但问题是逗号是可选的匹配,它允许正则表达式跨先前匹配的数字进行匹配。单词边界或
\b
应该是组的一部分,以确保您只匹配完整的数字:

^(?:\b(?:1[0-7]|[1-9])\,?)+$

请注意,旧的faishoned展开正则表达式仍然会表现得更好:

^(?:1[0-7]|[1-9])(?:,(?:1[0-7]|[1-9]))*$

您的正则表达式非常接近,但问题是逗号是可选的匹配项,它允许正则表达式跨先前匹配的数字进行匹配。单词边界或
\b
应该是组的一部分,以确保您只匹配完整的数字:

^(?:\b(?:1[0-7]|[1-9])\,?)+$

请注意,旧的faishoned展开正则表达式仍然会表现得更好:

^(?:1[0-7]|[1-9])(?:,(?:1[0-7]|[1-9]))*$

这里有两个选项,一个使用数组过滤器,另一个使用正则表达式

使用regex时,需要使用单词边界(
\b
)并设置值0-9(第一个选项)或[0-1][0-7](不需要20,21..)

我不知道你的想法是什么,但我强烈建议在这种情况下使用数组“filter”而不是正则表达式

/“1,2,17,18,19181111”。匹配(/^\b((1[0-7]|[1-9])\,?)+$/g)
//没有正则表达式
const result=“1,2,17,18,19181111”
.split(“,”)

.filter(i=>parseInt(i)这里有两个选项,一个使用数组过滤器,另一个使用正则表达式

使用regex时,需要使用单词边界(
\b
)并设置值0-9(第一个选项)或[0-1][0-7](不需要20,21..)

我不知道你的想法是什么,但我强烈建议在这种情况下使用数组“filter”而不是正则表达式

/“1,2,17,18,19181111”。匹配(/^\b((1[0-7]|[1-9])\,?)+$/g)
//没有正则表达式
const result=“1,2,17,18,19181111”
.split(“,”)


.filter(i=>parseInt(i),因为逗号是可选的匹配项
inputStr.split(“,”).filter(s=>+s这与Perl或PCRE有什么关系?你可以使用这个正则表达式:@anubhava谢谢。它起作用了。如果你愿意的话,也许你可以写一个详细的答案来解释为什么我的不起作用以及你的(看起来很复杂!)成功。答案将是未来的。因为逗号是可选的匹配项
inputStr.split(“,”)。过滤器(s=>+s这与Perl或PCRE有什么关系?你可以使用这个正则表达式:@anubhava谢谢。它成功了。如果你愿意,也许你可以写一个详细的答案,解释为什么我的不起作用以及你的(看起来非常复杂!)有效。答案将是未来的。很好,谢谢:)但我想有一个正则表达式解决方案:)@edam当然可以,试试anubhava的解决方案。当你匹配数值时,regex是一个错误的工具。@Sobrique实际上它是一个逗号分隔的数字列表,其中的数字不能超过17。所以它本质上是一个字符串。但regex不“做”数值。它做文本模式。很好,谢谢:)但我想要一个正则表达式解决方案:)@edam当然,试试anubhava的解决方案。当你匹配数值时,正则表达式是一个错误的工具。@Sobrique实际上它是一个逗号分隔的数字列表,其中任何数字都不能超过17。因此它本质上是一个字符串。但正则表达式不“做”数值。它有文本模式。您的live示例匹配字符串中的所有内容!但我希望不会有大于17的数字匹配!它有。当您的示例是多行字符串时,您只需在regex so^的末尾添加/m标志,$匹配每行的开头/结尾:/(?您的实时示例匹配字符串中的所有内容!但我希望不会有大于17的数字匹配!确实如此。当您的示例是多行字符串时,您只需在正则表达式的末尾添加/m标志,因此,^,$匹配每行的开头/结尾:/(?非常好的答案:)非常好的答案:)