首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在/中否定,?([1-9]-[1-9])|([1-9])/g

在/中否定,?([1-9]-[1-9])|([1-9])/g
EN

Stack Overflow用户
提问于 2011-10-29 16:16:35
回答 2查看 900关注 0票数 2

我正在尝试匹配包含数字和用连字符连接的数字的字符串,例如纵横填字游戏答案规范,例如1,2-21-1,3,4,2-2

/,?(([1-9]-[1-9])|([1-9]))/g是我用来匹配字符串的东西

代码语言:javascript
运行
复制
value = value.replace(/,?(([1-9]-[1-9])|([1-9]))/g, '');

替换了ok,我已经在一个在线测试器中检查过了。

我真正需要的是否定这一点,这样我就可以在keyup事件上使用它,检查文本区域的内容并删除不适合的字符,所以它只允许通过字符,如示例中所示。

我已经在期望的地方尝试了^,但是它没有做我期望的事情,我应该如何否定正则表达式,这样我就删除了所有不匹配的东西?

如果有更好的方法做这件事,我也乐于接受建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-29 16:26:43

代码语言:javascript
运行
复制
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,所以您必须处理这种情况并使用空数组,以便它可以联接:

代码语言:javascript
运行
复制
(value.match(pattern) || []).join(''); // ",1,2,3,4-6,1-1,3,4,2-2"

注意:在onblur上检查它们可能比在onkeyup上检查它们更好。弄乱用户当前正在输入的文本会让人讨厌。最好是等待用户完成键入。

票数 1
EN

Stack Overflow用户

发布于 2011-10-29 16:27:38

我没有在JS中测试它,但它应该返回从左边开始的有效字符串,并且只要遇到有效的值(注意,我使用了\d -如果您只想要1-9,则使用括号)。

(?:\d(?:-\d)?,)*\d(?:-\d)?

例如,将此正则表达式与字符串"0-1,1,2,3,4-4,2,,1,3--4"进行匹配,将返回"0-1,1,2,3,4-4,2"作为第一个匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7937742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档