我一直在处理一个接受Twitter参数的表单,例如#和@来填充Twitter Feed。
使用Angular.js我曾计划使用内置的ng-pattern
指令在保存之前验证输入,但验证的行为非常奇怪。在输入时,它会在输入的每个第二个字符上将“有效”字符串标记为无效。
很难解释确切的行为,所以继承人Plunker。
为了完整性,我将在这里添加我的输入字段ng-pattern
:
<input type="text" ng-pattern="/(^|\s)@(\w+)|(^|\s)#(\w+)/g" ng-model="foo" name="foo"/>
答案 0 :(得分:6)
这是因为全局匹配g选项,如果你把它拿出来就有效。
多次拨打test
或exec
involves state:
与exec(或与其结合使用)一样,在同一个全局正则表达式实例上多次调用的测试将超过上一个匹配。
基本上它正试图继续进行另一场比赛,但找不到一场:
a = /@(\w+)$/g;
> /@(\w+)$/g
a.exec("@test")
> ["@test", "test"]
a.exec("@test")
> null