我有一些以下格式的字符串:
[1985..1989]
[Start..End]
[ 1985 .. 1989 ]
[ Start .. End ]
[ 1985.13579 .. 1989.2468 ]
[ Start.from .. End.at ]
我需要捕获括号和 2 个点之间的两个部分,并删除空格/换行符(例如 1985
和 1989
) 。这是我到目前为止提出的正则表达式:
^\[\s*([\s\S]+?)\s*\.\.\s*([\s\S]+?)\s*\]$
(现场测试员:http://regex101.com/r/tO8gG6)
<小时/>现在这个正则表达式的问题是,如果我有一个看起来像 [2...5]
的字符串,第二个捕获组将得到 .5
,不是我想要的(您可以使用上面的测试器检查这一点)。在这种情况下,我希望匹配完全失败,并且我不知道如何修改上面的正则表达式来做到这一点。
最佳答案
尝试否定类:
^\[\s*([^.]+?)\s*\.\.\s*([^.]+?)\s*\]$
编辑:
根据您的编辑,由于您也可以有句号,因此您可以使用以下内容:
^\[\s*([^.]+?(?:\.[^.]+?)*?)\s*\.\.\s*([^.]+?(?:\.[^.]+?)*?)\s*\]$
关于JavaScript Regex : Match exactly N chars, 并防止过多的字符泄漏到捕获组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20813852/