字符串后跟确切字符数的Javascript正则表达式

字符串后跟确切字符数的Javascript正则表达式,javascript,jquery,regex,match,Javascript,Jquery,Regex,Match,我正在寻找与以下ID匹配的正则表达式: path-0 path-1 path-2 并且是否将ID与较大数量的字符匹配,例如: path-0-0 path-0-1 目前我有以下代码块: let数组=[ “路径0”、“路径1”、“路径2”、“路径0-0”、“路径0-1” ]; 设reg=/[^path-]{6}/; $.each(数组、函数(索引、值){ if(注册测试(值)){ 控制台日志(注册测试(值),值); }否则{ 控制台错误(注册测试(值),值); } }); 您要寻找的是一种检查

我正在寻找与以下ID匹配的正则表达式:

path-0
path-1
path-2
并且是否将ID与较大数量的字符匹配,例如:

path-0-0
path-0-1
目前我有以下代码块:

let数组=[
“路径0”、“路径1”、“路径2”、“路径0-0”、“路径0-1”
];
设reg=/[^path-]{6}/;
$.each(数组、函数(索引、值){
if(注册测试(值)){
控制台日志(注册测试(值),值);
}否则{
控制台错误(注册测试(值),值);
}
});

您要寻找的是一种检查模式
/-\d+/
是否只出现一次的方法。请注意,这里的符号
+
用于将数字与多个数字进行匹配。不过,您需要检查字符串结尾,它由
$
符号表示,与
^
表示其开头的方式相同。适用于您的最佳正则表达式选项是:

let reg = /^path-\d+$/;

首先,要匹配字符串的开头

^
然后是“路径”一词,后跟破折号

^path-
然后是一个字符,仅此而已(因此,行尾)

根据Arthur的评论,如果您的意图是允许ID在“path-”之后有一个以上的数字,您可以通过在
\d
后面加上
+
来指定需要1个或多个数字,如下所示:

^path-\d+$
简明的 根据我的原始评论…

您的模式
[^path-]
不起作用的原因是它匹配集合中不存在的任何字符,因此除了
ahpt-
(我重新排列了字符,以便您更好地理解它所说的内容)。当您想说匹配此集合中的任何内容(或不匹配)时,将使用字符集

例如,使用集合的示例是
^path-[0-9]$
。这表示*匹配ASCII表中
0
9
之间的字符,其中包括
0123456789
。定义相同字符集的另一种方法是使用速记标记
\d
(它指定相同的字符
0
9

集合开头使用的插入符号
^
指定集合应将这些字符取反。在您的示例中使用它的一个示例是
^path-[^\D]$
,它基本上是一个双负数,用于指定任何不是数字的内容(或简单地放置任何数字)。集合之外的任何位置(假设未转义)
^
表示字符串开头的断言位置

密码
let数组=[
“路径0”、“路径1”、“路径2”、“路径0-0”、“路径0-1”、“路径12”
];
let reg=/^path-\d$/;
$.each(数组、函数(索引、值){
if(注册测试(值)){
控制台日志(注册测试(值),值);
}否则{
控制台错误(注册测试(值),值);
}
});

这个
^path-\d$
?Just FYI是一个了解正则表达式模式的好网站。FYI
[^path-]
意味着匹配除集合中的字符以外的任何字符。因此,任何不是
路径-
中的字符,这就是为什么您得到所有错误的原因ctwheels的解决方案正在工作,谢谢@我在找工作,我把我的评论转换成下面的答案(有两个片段的那一个)与path-10OP没有要求的答案不匹配。实际上,他们说“并且不匹配具有更大字符数的ID”,如果您认为在ID的上下文中,您可以确定地推断ID可能是大于0的任何整数,而不受示例的限制。只是为了防止将来的错误,我理解你的观点,只是为了给你机会来改进你的答案。我认为很明显,问题的意图是,检查下面的例子,“更多的字符数”是关于非数字字符。
^path-\d+$
^path-\d$