假设我有以下字符串
def name1
toSomething
def name2
toSomethingElse
我怎么能找到name1
和name2
。
使用string.match(/(?:def) (.*)/)
给了我:
name1
toSomething
def name2
toSomethingElse
那么如何逐行搜索字符串呢?
假设我有以下字符串
def name1
toSomething
def name2
toSomethingElse
我怎么能找到name1
和name2
。
使用string.match(/(?:def) (.*)/)
给了我:
name1
toSomething
def name2
toSomethingElse
那么如何逐行搜索字符串呢?
您可以尝试:
/(?: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])
}
/^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);
您的正则表达式应该只在第一行给您匹配,因为.
不匹配换行符。
就是说试试/(?:def)\s+(\S*)/