JavaScript正则表达式:完全匹配N个字符,并防止过多的字符泄漏到捕获组中

时间:2013-12-28 11:11:42

标签: javascript regex

我有以下格式的几个字符串:

[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这不是我想要的(你可以使用测试器检查这个)以上)。在这种情况下,我希望匹配完全失败,我不确定如何修改上面的正则表达式来做到这一点。

4 个答案:

答案 0 :(得分:1)

请尝试以下操作,我将 \。\。修改为 \。+ 表示捕获所有一个或多个点

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

我修改了你的正则表达式http://regex101.com/r/wE6aY0

答案 1 :(得分:1)

尝试否定课程:

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

regex101 demo

修改

根据你的编辑,因为你也可以有句号,你可以使用它:

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

regex101 demo

答案 2 :(得分:0)

再次编辑!!

试试链接:

http://regex101.com/r/vW1wD1

RE RE REVISED EXPRESS:

\[ ?(\d*|\w*)\.?(\d*|\w*) ?.. ?(\d*|\w*)\.?(\d*|\w*) ?\]

现在,它符合您提到的所有模式。

答案 3 :(得分:0)

这是另一项似乎对你迄今提供的内容有用的贡献

([^\s.[]\S+?)\s*\.{2,}\s*(\S+)\s*\]

http://regex101.com/r/bQ1tG9