正则表达式 - 匹配字符而非数字

时间:2015-02-21 02:22:54

标签: javascript regex

我想匹配一个字符串,后跟多个标签和另一个字符串。第二个字符串不能有任何数字。

所以我想'someText \ t \ tsomeText2' - > someText& somteText2

我有以下JavaScript:

var linePattern = /(^[^\s].+?)\t+([^\d].+)/
var regexp = new RegExp(linePattern);
var parts = 'someText\t\t1234'.match(regexp);

不确定为什么它实际匹配......它不应该......

2 个答案:

答案 0 :(得分:1)

因为最后的.+也会匹配数字。

^(.*?)\t\t+(\D+)$

OR

^(.*?)\t+(\D+)$

DEMO

你的正则表达式,

    (^             [^\s]               .+?)               \t+                          ([^\d].+)
                     ^                  ^                 ^
   Start           Matches the   Matches all the chars  Matches only the first tab  since the second character must not be a non-digit character. So `[^\d]` matches the second tab. and the `.+` matches all the chars upto the last. Finally you got a match.
            first non-space      upto the  first tab
              character.

<强>代码:

> var linePattern = /^(.*?)\t+(\D+)$/;
undefined
> var regexp = new RegExp(linePattern);
undefined
> var parts = 'someText\t\t1234'.match(regexp);
undefined
> parts
null
> var parts = 'someText\t\tfoo'.match(regexp);
undefined
> parts
[ 'someText\t\tfoo',
  'someText',
  'foo',
  index: 0,
  input: 'someText\t\tfoo' ]

答案 1 :(得分:1)

([^\d].+)实际上匹配了标签中的第一个匹配标签后的标签(除数字之外的任何字符),然后贪婪的.+将继续消费并匹配数字字符串。

此外,您不需要在此处使用RegExp对象,正则表达式文字就足够了。

您可以按如下方式修改正则表达式和语法:

var re = /^(.*?)\t+(\D+)$/
var parts = str.match(re);

注意:在此处使用字符串^的开头和字符串$的结尾非常重要。