正则表达式 - 匹配除个别数字之外的所有字母数字字符

时间:2013-10-29 15:51:33

标签: javascript ruby regex

我想创建一个RegEx,只匹配英语字母数字字符,但忽略(或丢弃)Ruby中的孤立数字(如果可能,也可以在JS中)。

示例:

1)我希望以下内容匹配:

  • 4chan的
  • 9GAG
  • test91323432
  • asf5asdfaf35edfdfad
  • afafaffe

但不是:

  • 92342424
  • 343424
  • 34432 等等..

以上就是我想要的。

编辑:我删除了第二个子问题。只关注第一个,非常感谢你的答案!!

抱歉,我的正则表达能力不是很好(因此这个问题!)

谢谢。

4 个答案:

答案 0 :(得分:1)

您可以尝试以下表达式(在Ruby和Javascript中均可使用)

^(?!^\d+$)[[:alnum:]]+$

这首先确保字符串不仅仅是数字,使用负向前看(?!^[0-9]+$),然后它匹配一个或多个字母数字字符,支持Unicode字符,这意味着它也适用于法语字母。

编辑:如果您只想要英文字母:

^(?!^\d+$)\w+$

Rubular Demo

答案 1 :(得分:1)

任何拉丁字母:

/(?=.*\p{Alpha})\p{Alnum}+/

答案 2 :(得分:1)

我很确定你不能用一个正则表达式做你想做的事情。单个字母字符,在一组数字中的任何位置,都会使它成为有效匹配,并且无法在正则表达式中表示,因为你真正说的是"需要一个字母在这个单词的前面,但只有在中间或末尾没有字母的情况下,正则表达式不会这样做。

你最好的选择是两次通过:

  1. 与您的字母数字相匹配的,加上特殊的"法语"字符(模式:TBD,基于您想要接受的特殊字符)和
  2. 仅匹配数字的一个(模式:将包括[0-9]+ ...需要有关具体情况的更多信息,以便为您提供最终的完整正则表达式)
  3. 你想要的最终值需要通过第一个正则表达式而不是第二个正则表达式。

    另外。 。

    为了给你一个更好的答案,我们需要了解一些事情:

    • 您是否正在测试整个字符串是否与模式匹配?
    • 您是否尝试在更大的字符串中捕获该模式的单个实例?
    • 您是否尝试在更大的字符串中捕获该模式的所有实例?

    这些问题的答案会对您需要的最终正则表达式产生重大影响。

    最后。 。

    "法语"人物。 。 。你需要非常具体地说明哪些特殊字符是可以接受的,哪些特征字符是不可接受的。在regex中有三种主要的特殊字符匹配方法:组,加法和减法

    • groups - 这些字符代表您正在使用的正则表达式版本中的预设字符组。例如,\s匹配所有空格
    • 添加剂 - 这是列出正则表达式中每个可接受字符(或字符范围)的过程。当你有一小组可接受的字符
    • 时,这会更好
    • 减法 - 这是列出正则表达式中每个不可接受的字符(或字符范围)的过程。如果你有一大群可接受的字符
    • ,那就更好了

    如果你能解决其中一些问题,我们应该能够给你一个更好的答案。

答案 3 :(得分:0)

也许这是^(?![0-9]+$)[a-zA-Z0-9\x80-\xa5]+$

修改 - 修正了剪切和粘贴错误,并添加了扩展字符范围\x80-\xa5
其中包括重音字符(取决于区域设置,数字可能不同)