我想匹配一个字符串,后跟多个标签和另一个字符串。第二个字符串不能有任何数字。
所以我想'someText \ t \ tsomeText2' - > someText& somteText2
我有以下JavaScript:
var linePattern = /(^[^\s].+?)\t+([^\d].+)/
var regexp = new RegExp(linePattern);
var parts = 'someText\t\t1234'.match(regexp);
不确定为什么它实际匹配......它不应该......
答案 0 :(得分:1)
因为最后的.+
也会匹配数字。
^(.*?)\t\t+(\D+)$
OR
^(.*?)\t+(\D+)$
你的正则表达式,
(^ [^\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);
注意:在此处使用字符串^
的开头和字符串$
的结尾非常重要。