【发布时间】:2017-08-21 09:09:18
【问题描述】:
在我的应用中,我可以接受这种格式的字符串:
'key':'value'
'key1':'value1'
'key2':'value2'
现在我想写一个正则表达式模式来检查这种格式,所以我写了这个模式:
/^'(.*)'(:{1})'(.*)?'($|\n)/gm
https://regex101.com/r/oM1qO9/3
此模式有效,但如果我将字符串更改为以下示例,则再次工作,因为选择第一个引号和最后一个引号,因此字符串与模式匹配。
'key':'value','key1':'value1' 'key2':'value2'
【问题讨论】:
-
将
.*替换为[^']*(否定字符类中的单引号)。/^'([^']*)':'([^']*)'$/. -
@WiktorStribiżew 不再工作,regex101.com/r/oM1qO9/5
-
你可能想要一个非贪婪的消费:
/^'(.*?)'(:{1})'(.*?)?'($|\n)/gm -
{1}没用,(.*)和(.*)?可能应该是(.*?)以迫使他们不要贪婪,但你的regex的真正问题是($|\n)。它强制regex匹配整个字符串。 -
添加
\s*以在需要时允许空格。请查看我的 cmets 并相应地更新问题以使其更清晰。 regex101.com/r/oM1qO9/8 有效吗?
标签: regex