我需要确保name
的每次出现都始终跟一个特定的模式,例如:[a-zA-Z]
。只有在没有出现名称后面没有此模式的情况下,正则表达式才必须匹配。因此,由于Ch%ristoph
,以下字符串不能匹配。
{name:Anton,age:10}{name:Bert,age:20}{name:Ch%ristoph,age:30}
要明确:我需要完成完全使用正则表达式而不使用reg ex定义或任何其他代码。 (我知道环顾四周和高级正则表达式,但无法找到解决此问题的方法。)
答案 0 :(得分:1)
如果您反转条件,您可以轻松检查字符串无效(即匹配无效条件):
var strings = ['{name:Anton,age:10},{name:Bert,age:20},{name:Ch%ristoph,age:30}','{name:Anton,age:10},{name:Bert,age:20}{name:Christoph,age:30}'];
for(var i=0; i<strings.length; i++){
var match = strings[i].match(/[{,][\s]*name:[a-z]*[^},a-z]/i);
console.log(strings[i]+' is '+(match==null?'valid':'invalid'))
}
如果你真的需要一个只传递/失败字符串的正则表达式解决方案,请尝试这样的事情:
var strings = ['{name:Anton,age:10},{name:Bert,age:20},{name:Ch%ristoph,age:30}','{name:Anton,age:10},{name:Bert,age:20}{name:Christoph,age:30}'];
for(var i=0; i<strings.length; i++){
var match = strings[i].match(/^({name:[a-z]+,[^}]+},?)+$/gi);
console.log(strings[i]+' '+(match==null?'does not match':'matches'))
}
答案 1 :(得分:0)
此正则表达式将匹配您的确切模式,name:
部分后只需要a-z或A-Z。
name:[a-zA-Z]+,age:[0-9]+
你可以在这里测试一下。 http://regexr.com/3eell
如果要求是整个输入的通过/失败,那么您可以使用以下
({name:[a-zA-Z]+,age:[0-9]+},?)+
确保有一个匹配,并且一个匹配的长度与您的输入长度相同。
答案 2 :(得分:-1)
我自己找到了答案:
^(?:{name:[a-zA-Z]+?,age:\d+})+$
一般来说:设α(这里name:
)是模式β总是要遵循的模式(这里是[a-zA-Z]
)。让我们成为一个重复的结构中的分隔符,它本身由花括号分隔。让ɣ成为该结构中的其他模式(这里是age:\d+
)然后正则表达式将是:
^(:{αβ+ ?,ɣ})+ $
我认为这里的关键是使用完整的字符串。以前的答案不是这种情况。