使用JavaScript在每一行中查找模式

时间:2013-02-13 22:12:25

标签: javascript regex

假设我有以下字符串

def name1
 toSomething

def name2 
  toSomethingElse

我如何找到name1name2

使用string.match(/(?:def) (.*)/)给我:

name1
 toSomething

def name2 
  toSomethingElse

那么如何逐行搜索字符串呢?

3 个答案:

答案 0 :(得分:1)

您可以尝试:

/(?:def)\s+([^\s]+)/g

在第一组中,您将获得所需(name1等)。

见这里:http://regex101.com/r/rH0yH8

如何运行它的示例:

var s = "def name1\ntoSomething\n\ndef name2 \ntoSomethingElse"
var re = /(?:def)\s+([^\s]+)/g

while (x = re.exec(s)) {
    alert(x[1])
}

答案 1 :(得分:1)

/^def (.*)/gm

会做到的。 g标志与每个实例匹配,m标志使^在行的开头而不是在输入的开头匹配。

使用.exec,您可以循环并逐个获取结果。

var myString = 'def foo\n  boo\n\ndef bar\n  far\n';
for (var re = /^def (.*)/gm, match; (match = re.exec(myString));) {
  alert(match[1]);
}

或者您可以在字符串上使用.match来获取一个数组中的所有结果,但这不会为您提供捕获组。

var myString = 'def foo\n  boo\n\ndef bar\n  far\n';
var re = /^def (.*)/gm;
var matches = myString.match(re);

答案 2 :(得分:0)

你的正则表达式应该只是在第一行给你匹配,因为.与换行符不匹配。

那就是说,试试/(?:def)\s+(\S*)/