javascript中的正则表达式正则表达式模式,用于逗号输入

时间:2013-11-13 21:12:15

标签: javascript regex

我有一个输入场景,输入模式如下:

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;         
}

2 个答案:

答案 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 - 如果它应该,请告诉我。