使用JavaScript在每行中查找模式
假设我有以下字符串使用JavaScript在每行中查找模式,javascript,regex,Javascript,Regex,假设我有以下字符串 def name1 toSomething def name2 toSomethingElse 如何找到name1和name2 使用string.match(/(?:def)(.*)/)可以得到: name1 toSomething def name2 toSomethingElse 那么我如何逐行搜索字符串呢?您的正则表达式应该只在第一行提供匹配项,因为与换行符不匹配 也就是说,请尝试/(?:def)\s+(\s*)/,您可以尝试: /(?:def)
def name1
toSomething
def name2
toSomethingElse
如何找到name1
和name2
使用string.match(/(?:def)(.*)/)
可以得到:
name1
toSomething
def name2
toSomethingElse
那么我如何逐行搜索字符串呢?您的正则表达式应该只在第一行提供匹配项,因为
与换行符不匹配
也就是说,请尝试/(?:def)\s+(\s*)/
,您可以尝试:
/(?:def)\s+([^\s]+)/g
在第一组中,您将获得所需的内容(name1
等)
请看这里:
如何运行它的示例:
var s = "def name1\ntoSomething\n\ndef name2 \ntoSomethingElse"
var re = /(?:def)\s+([^\s]+)/g
while (x = re.exec(s)) {
alert(x[1])
}
我会的。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 name1”,“def name2”]
@AndreasKöberle比赛的第一组将为你提供你所需要的。一旦你有了匹配,只需做match[1]
@AndreasKöberle,第一个应该给你常规组。
var myString = 'def foo\n boo\n\ndef bar\n far\n';
var re = /^def (.*)/gm;
var matches = myString.match(re);