JavaScript Regex : Match exactly N chars, 并防止过多的字符泄漏到捕获组中

标签 javascript regex

我有一些以下格式的字符串:

[1985..1989]
[Start..End]
[ 1985 .. 1989 ]
[ Start .. End ]
[ 1985.13579 .. 1989.2468 ]
[ Start.from .. End.at ]

我需要捕获括号和 2 个点之间的两个部分,并删除空格/换行符(例如 19851989) 。这是我到目前为止提出的正则表达式:

^\[\s*([\s\S]+?)\s*\.\.\s*([\s\S]+?)\s*\]$

(现场测试员:http://regex101.com/r/tO8gG6)

<小时/>

现在这个正则表达式的问题是,如果我有一个看起来像 [2...5] 的字符串,第二个捕获组将得到 .5 ,不是我想要的(您可以使用上面的测试器检查这一点)。在这种情况下,我希望匹配完全失败,并且我不知道如何修改上面的正则表达式来做到这一点。

最佳答案

尝试否定类:

^\[\s*([^.]+?)\s*\.\.\s*([^.]+?)\s*\]$

regex101 demo

编辑:

根据您的编辑,由于您也可以有句号,因此您可以使用以下内容:

^\[\s*([^.]+?(?:\.[^.]+?)*?)\s*\.\.\s*([^.]+?(?:\.[^.]+?)*?)\s*\]$

regex101 demo

关于JavaScript Regex : Match exactly N chars, 并防止过多的字符泄漏到捕获组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20813852/

相关文章:

c# - SQL Server 2008 中的正则表达式

javascript - 使用工厂模式时如何创建一个空的 $resource

javascript - 按键值对 JSON 响应进行排序

javascript - 遍历列表并在 jquery 中获取选中的复选框 ID

c# - 使用 SendKeys 发送特殊字符

java - 如何检查字符串 B 的任何部分是否在字符串 A 中

JAVA按单词、标点符号和引号分割句子

java - 正则表达式,如何编写查询

javascript - IE9 中输入按钮单击不是通过 JavaScript 调用的

javascript - 如何在 Drupal 进行 ajax 调用后重新加载自定义 JavaScript 文件?