我试图编写一个函数,如果它的输入字符串与模式匹配,则返回true;如果不匹配,则返回false。在我看来,这是正则表达式的任务。
模式是:<something>:<number>-<number>;
其中<something>
可以是字母、数字或空白的任意组合。模式可以在输入字符串中重复任意次数,而;
对于模式的最后一次重复是可选的。
因此,这些将返回真:
但这些都是假的:
我得到了一个模式的重复可以用
[\w\d\s]*:\d+-\d+;?
但我很难找到如何确定整个字符串是否只由重复的模式组成。
我尝试过几种方法,包括使用( )+
和/或^ $
围绕模式,但始终遇到问题。在JavaScript中,检查字符串是否仅由重复一次或多次的模式组成的最佳方法是什么?
发布于 2017-03-13 20:58:01
您可以使用以下表达式:
/^[\w\s]*:\d+-\d+(?:;[\w\s]*:\d+-\d+)*;?$/
详细信息
^
-字符串的开始[\w\s]*
-零或多个字或空格字符:
-一个冒号\d+-\d+
-1或更多位数,-
和更多位数(?:;[\w\s]*:\d+-\d+)*
-0或更多序列:;
-一个分号[\w\s]*:\d+-\d+
--上面描述的模式
;?
-1或0 ;
$
-字符串的末端。注意,[\w\d]
与\w
匹配相同的文本,因此,我建议从[\w\s]
中删除\d
。
发布于 2017-03-13 21:00:06
您可以使用这个更简单的正则表达式:
/^(?:[a-zA-Z0-9]*:\d+-\d+(?:;?$|;))+$/
我们一直在每组的末尾跟踪可选的;
,即:
[a-zA-Z0-9]*:\d+-\d+;?
,这匹配0或多个字母数字,后面是:
,后面是数字-连字符-数字。
发布于 2017-03-14 15:53:22
你需要使用+量词。尝试下一种方法:
function test(str) {
return /^([\w\s]*:\d+-\d+;?)+$/.test(str)
}
console.log(test('ABC:1-2;CDE:3-4'));//true
console.log(test('ABC:1-2;CDE:3-4;'));//true
console.log(test('ABC:1-2'));//true
console.log(test(':1-2'));//true
console.log(test('ABC:1-2;cats;CDE:3-4'));//false
console.log(test('ABC:1-2;CDE:3-4;cats'));//false
https://stackoverflow.com/questions/42773239
复制相似问题