1

假设我有以下字符串

def name1
 toSomething

def name2 
  toSomethingElse

我怎么能找到name1name2

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

name1
 toSomething

def name2 
  toSomethingElse

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

4

3 回答 3

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])
}
于 2013-02-13T22:14:53.707 回答
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);
于 2013-02-13T22:17:05.810 回答
0

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

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

于 2013-02-13T22:14:46.413 回答