我正在尝试匹配包含数字和带连字符的数字组合的字符串,例如填字游戏答案规范,例如1,2-2
或1-1,3,4,2-2
/,?(([1-9]-[1-9])|([1-9]))/g
是我提出来匹配字符串
value = value.replace(/,?(([1-9]-[1-9])|([1-9]))/g, '');
替换好了,我已经在在线测试仪上检查了它。
我真正需要的是否定这一点,所以我可以在keyup事件中使用它,检查textarea的内容并删除不适合的字符,因此它只允许通过字符,例如示例。
我已经尝试了^
预期,但这不是我所期望的,我应该如何否定正则表达式,以便删除所有不匹配的内容?
如果有更好的方法,我也愿意接受建议。
答案 0 :(得分:1)
var value = 'hello,1,2,3,4-6,1-1,3,test,4,2-2';
var pattern = /,?(([1-9]-[1-9])|([1-9]))/g;
value.replace(pattern, ''); // "hello,test"
您可以使用String#match。使用/g
标志,它会返回所有匹配项的数组,然后您可以使用Array#join加入它们。
问题是String#match在没有匹配时返回null,所以你必须处理这种情况并使用一个空数组才能加入:
(value.match(pattern) || []).join(''); // ",1,2,3,4-6,1-1,3,4,2-2"
注意:最好在onblur
而不是onkeyup
上查看它们。弄乱用户当前正在键入的文本将使其烦人。最好等待用户完成输入。
答案 1 :(得分:1)
没有在JS中测试它,但是这应该从左边开始返回有效字符串并且只要遇到有效值(注意我使用了\d
- 如果你只想要1-9 ,然后使用括号)。
(?:\d(?:-\d)?,)*\d(?:-\d)?
E.g。将此正则表达式与字符串"0-1,1,2,3,4-4,2,,1,3--4"
匹配将返回"0-1,1,2,3,4-4,2"
作为第一个匹配。