Javascript(node)正则表达式似乎与字符串的开头不匹配

时间:2011-09-17 16:33:43

标签: javascript regex node.js

我在Javascript中使用正则表达式,但它们似乎并不是从字符串的开头开始的。在一个简单的例子中,我想获取文件名,然后是第一个冒号后的所有内容

 //string
 file.text:16:  lots of random text here with goes on for ages

 //regex
 (.?)[:](.*)

 // group 1 returns 't'

4 个答案:

答案 0 :(得分:2)

/^([^:]+):(.*)/.exec('file.text:16:  lots of random text here with goes on for ages')

给出....

["file.text:16:  lots of random text here with goes on for ages", "file.text", "16:  lots of random text here with goes on for ages"]

答案 1 :(得分:1)

试试这个正则表达式:

/^([^:]+)[:](.*)/

阐释:

^       #Start of string
(       #Start of capturing class #1
  [^:]    #Any character other than :
  +       #One or more of the previous character class
)       #End of capturing class #1
[:]     #One :
(.*)    #Any number of characters other than newline

?运算符仅捕获前一个符号中的零个或一个。

您也可以使用字符串操作:

str = "file.text:16:";
var n = str.indexOf(":");
var fileName = str.substr(0, n);
var everythingElse = str.substr(n);

答案 2 :(得分:1)

?运算符返回0或1个匹配项。你想要*运算符,你应该在第一组

中选择不是:的所有东西
  ([^:]*)[:](.*)

答案 3 :(得分:1)

非regexy回答:

var a = s.split(":");

然后加入[1]和其余元素。

或者只是获取第一个分号的索引并使用它创建两个字符串。