我有一个输入场景,输入模式如下:
var location = /^[a-z]+\s*[a-z]*,\s*[a-z]+\s*([^,]?[a-z]+)*$/i;
我的输入属于以下允许类型:
以下输入类型(具有额外输入的类型,未通过测试:
谁能告诉我这里我做错了什么?任何帮助,将不胜感激!谢谢!
是的,我是regex和js的新手。
用于测试的完整代码:
if (str.match(locationstring)){
console.log("Match pattern str!");
type = 2;
}else{
alert("No match str!");
return;
}
答案 0 :(得分:2)
var location = /^[a-z]+\s*[a-z]*,\s*[a-z]+\s*([^,]?[a-z]+)*$/i;
^^^^
在这里,您明确禁止任何逗号(使用negated character class)。每个包含多个逗号的字符串都符合该规则。
看起来你真的想在那个地方允许逗号后跟可选的空格:
var location = /^[a-z]+\s*[a-z]*,\s*[a-z]+(,\s*[a-z]+)*$/i;
答案 1 :(得分:1)
你的正则表达式只能匹配一个位置 - 正则表达式中逗号所在的精确列。很明显,它不会匹配包含多个字符串的字符串;)
此正则表达式将匹配您的所有测试用例(与您的测试用例相比,匹配名称中没有空格的城市 - 那些存在,您知道吗?^^):
/^\w+(\s*\w+)?\s*,\s*\w+\s*(,\s*\w+)?$/i?
(它仍然不包括包含whistespace的contries或state - 如果它应该,请告诉我。