繁体   English   中英

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

[英]Javascript regex for string followed by exact number of chars

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

path-0
path-1
path-2

并且与ID的字符数匹配,例如:

path-0-0
path-0-1

目前,我有这段代码:

 let array = [ 'path-0', 'path-1', 'path-2', 'path-0-0', 'path-0-1' ]; let reg = /[^path-]{6}/; $.each( array, function(index, value) { if(reg.test(value) ) { console.log(reg.test(value), value); } else { console.error(reg.test(value), value); } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

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

^

然后,单词“ path”后跟一个破折号

^path-

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

^path-\d$

根据亚瑟(Arthur)的评论,如果您打算允许ID在“ path-”之后使用多于一位的数字,则可以通过在\\d后缀+来指定想要1位或更多的数字,如下所示:

^path-\d+$

您正在寻找一种检查模式/-\\d+/仅发生一次的方法。 请注意,此处的符号+可以匹配多于一位的数字。 但是,您需要检查由$符号表示的字符串结尾,以同样的方式表示^表示它的开头。 最适合您的正则表达式选项是:

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

简要

根据我的原始评论...

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

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

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

^path-\d$

 let array = [ 'path-0', 'path-1', 'path-2', 'path-0-0', 'path-0-1', 'path-12' ]; let reg = /^path-\\d$/; $.each( array, function(index, value) { if(reg.test(value) ) { console.log(reg.test(value), value); } else { console.error(reg.test(value), value); } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

如果要匹配大于1位的可能性,可以使用以下内容。

^path-\d+$

 let array = [ 'path-0', 'path-1', 'path-2', 'path-0-0', 'path-0-1', 'path-12' ]; let reg = /^path-\\d+$/; $.each( array, function(index, value) { if(reg.test(value) ) { console.log(reg.test(value), value); } else { console.error(reg.test(value), value); } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 


说明

  • ^在字符串开头声明位置
  • path-从字面上匹配
  • \\d匹配任何数字
  • $在字符串末尾声明位置

暂无
暂无

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

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