如何为具有字母数字字符但不仅仅由数字组成的单词编写正则表达式?

时间:2018-04-11 19:23:34

标签: regex regex-lookarounds

对于线路输入“Abcd abcd1a 5ever qw3-fne superb5 1234 0”

我正在尝试匹配包含字母和数字的单词,例如“Abcd”,“abcd1a”,“5ever”,“superb5”,“qw3”,“fne”。但它不应该匹配只有数字的单词,比如“1234”,“0”。

除了上述字母数字之外,所有字符都会分隔单词。

我尝试了这个正则表达式(?![0-9])([A-Za-z0-9] +),它与单词“5ever”不匹配,但适用于其他所有内容。

如何编写此正则表达式以使其与“5ever”一词完全匹配?

2 个答案:

答案 0 :(得分:4)

选项1 - 否定前瞻

See regex in use here

\b(?!\d+\b)[^\W_]+
\b(?!\d+\b)[A-Za-z\d]+
\b(?!\d+\b)[a-z\d]+         # With case-insensitive flag enabled
  • \b断言位置为单词边界
  • (?!\d+\b)否定前瞻确保整个单词不仅由数字组成
  • [^\W_]+[A-Za-z\d]+仅匹配字母或数字一次或多次

选项2 - 没有预测

另一个选项seen in use here(启用不区分大小写的i标志):

\b\d*[a-z][a-z\d]*          # With case-insensitive flag enabled
\b\d*[A-Za-z][A-Za-z\d]*
  • \b断言位置为单词边界
  • \d*任意次数匹配
  • [a-z]匹配任何字母(启用了i标记,这也匹配A-Z
  • [a-z\d]*任意次数匹配任何字母或数字

匹配字符串Abcd abcd1a 5ever qw3-fne superb5 1234 0中的以下内容:

Abcd
abcd1a
5ever
qw3
fne
superb5

答案 1 :(得分:0)

我想出了以下正则表达式:

/\d*[a-z_]+\w*/ig
  • \d*以可能的数字开头
  • [a-z_]+在一个或多个数字中包含字母或下划线
  • \w*可能后跟字母后面的任何字符
  • ig案例 nsensitive和 g lobal flags

DEMO详细解释