假设我有以下字符串
def name1
toSomething
def name2
toSomethingElse
我如何找到name1
和name2
。
使用string.match(/(?:def) (.*)/)
给我:
name1
toSomething
def name2
toSomethingElse
那么如何逐行搜索字符串呢?
答案 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*)/