首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript:检查整个字符串是否由可重复的模式组成

JavaScript:检查整个字符串是否由可重复的模式组成
EN

Stack Overflow用户
提问于 2017-03-13 20:55:02
回答 3查看 141关注 0票数 0

我试图编写一个函数,如果它的输入字符串与模式匹配,则返回true;如果不匹配,则返回false。在我看来,这是正则表达式的任务。

模式是:<something>:<number>-<number>;

其中<something>可以是字母、数字或空白的任意组合。模式可以在输入字符串中重复任意次数,而;对于模式的最后一次重复是可选的。

因此,这些将返回真:

  • ABC:1-2;CDE:3-4
  • ABC:1-2,CDE:3-4;
  • ABC:1-2
  • *1-2

但这些都是假的:

  • ABC:1-2;猫;CDE:3-4
  • ABC:1-2;CDE:3-4;猫

我得到了一个模式的重复可以用

[\w\d\s]*:\d+-\d+;?

但我很难找到如何确定整个字符串是否只由重复的模式组成。

我尝试过几种方法,包括使用( )+和/或^ $围绕模式,但始终遇到问题。在JavaScript中,检查字符串是否仅由重复一次或多次的模式组成的最佳方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-13 20:58:01

您可以使用以下表达式:

代码语言:javascript
运行
复制
/^[\w\s]*:\d+-\d+(?:;[\w\s]*:\d+-\d+)*;?$/

regex演示

详细信息

  • ^ -字符串的开始
  • [\w\s]* -零或多个字或空格字符
  • : -一个冒号
  • \d+-\d+ -1或更多位数,-和更多位数
  • (?:;[\w\s]*:\d+-\d+)* -0或更多序列:
    • ; -一个分号
    • [\w\s]*:\d+-\d+ --上面描述的模式

  • ;? -1或0 ;
  • $ -字符串的末端。

注意,[\w\d]\w匹配相同的文本,因此,我建议从[\w\s]中删除\d

票数 3
EN

Stack Overflow用户

发布于 2017-03-13 21:00:06

您可以使用这个更简单的正则表达式:

代码语言:javascript
运行
复制
/^(?:[a-zA-Z0-9]*:\d+-\d+(?:;?$|;))+$/

RegEx演示

我们一直在每组的末尾跟踪可选的;,即:

[a-zA-Z0-9]*:\d+-\d+;?,这匹配0或多个字母数字,后面是:,后面是数字-连字符-数字。

票数 1
EN

Stack Overflow用户

发布于 2017-03-14 15:53:22

你需要使用+量词。尝试下一种方法:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42773239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档