Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript在每行中查找模式_Javascript_Regex - Fatal编程技术网

使用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);