[英]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表中0
到9
之间的字符,其中包括0123456789
。 定义相同字符集的另一种方法是使用速记标记\\d
(指定相同的字符0
到9
)。
在集合开头使用的脱字符号^
表示该集合应否定这些字符。 在您的示例中使用它的一个示例是^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.