我试图验证用户输入的令牌。
我的规则是,如果用户在双大括号之间输入一个字符串,{{myToken}}
则只允许在它们之间放置特定的单词。对于这个例子,让我们假设“狗”和“猫”是有效的,但是对于大括号中的任何其他字符串都无效。如果不存在大括号,则允许任何字符串。
我发现写一个简单的狗或猫是很容易的。
测试句1:
/{{(dog|cat+?)}}/g
但是,我仍然希望这句话是有效的:
测试句2:
最后,这句话应该是无效。
测试句3:
发布于 2019-12-16 16:26:54
不清楚您要匹配的是什么,但如果遵循以下规则,则假设是整个字符串:
{{...}}
我有一条鱼{{dog}}
{{cat}}
i拥有{{狗}和{cat}但不包含fish上述内容不匹配的任何内容都应视为无效:
我拥有一个{cow}}
有几种匹配这些字符串的方法。
方法1-回火贪婪令牌
您可以对脾气暴躁的象征进行交替扩展,以匹配指定的双花括号:
^(?:(?!{{2}).|{{2}(?:dog|cat)}{2})+$
它的工作原理:
^
在行开始处的断言位置(?:(?!{{2}).|{{2}(?:dog|cat)}{2})+
回火贪婪令牌匹配以下一次或多次(?!{{2}).
负前瞻确保以下内容不是{{
,如果不是,则匹配字符(.
匹配除换行符以外的任何内容--如果需要匹配换行符,则将.
更改为[\s\S]
或启用s
修饰符){{2}(?:dog|cat)}{2}
匹配{{dog}}
或{{cat}}
$
断言在行尾的位置方法2-简单交替
您可以使用相当简单的替换来替换上面经过调整的贪婪令牌所做的事情:
参见此处使用的regex:(注意,该链接在第一个字符集中有\n
以供显示)
^(?:[^{]|{(?!{)|{{2}(?:dog|cat)}{2})+$
它的工作原理:
^
在行开始处的断言位置(?:[^{]|{(?!{)|{{2}(?:dog|cat)}{2})+
再匹配一次[^{]
匹配除{
以外的任何字符{(?!{)
匹配{
,如果它后面没有{
(例如,如果您有类似于{this}
的东西,它将允许它匹配){{2}(?:dog|cat)}{2}
匹配{{dog}}
或{{cat}}
$
断言在行尾的位置https://stackoverflow.com/questions/59360137
复制相似问题