Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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,我需要一个JavaScript正则表达式来匹配Name:之后的John(不区分大小写) 我知道怎么做,但我不知道如何从其他行获取字符串,例如(从文本区域): 这就是我试图做的::var str=/\s[a-zA-Z0-9](?=Name)/ 逻辑:获取一个字符串,该字符串的行空间中有字母/数字,后跟名称 然后,我将使用.test()方法 编辑: 我试图使这个问题比本来应该的更简单。我不太明白的是,如何将“John”(真的是任何东西)分隔在一个新行上,后跟一个特定的字符串(在本例中是Name)

我需要一个JavaScript正则表达式来匹配
Name:
之后的
John
(不区分大小写)

我知道怎么做,但我不知道如何从其他行获取字符串,例如(从文本区域):

这就是我试图做的::
var str=/\s[a-zA-Z0-9](?=Name)/

逻辑:获取一个字符串,该字符串的行空间中有字母/数字,后跟名称

然后,我将使用
.test()方法


编辑:

我试图使这个问题比本来应该的更简单。我不太明白的是,如何将“John”(真的是任何东西)分隔在一个新行上,后跟一个特定的字符串(在本例中是
Name



例如,如果
约翰
跟在
名字
{dosomething}后面,或者{dosomethingelse}

不幸的是,JavaScript不支持look behinds。对于这样简单的事情,您可以像这样匹配字符串的两个部分:

var str = /Name\s+([a-zA-Z0-9]+)/;
然后,如果要获取
John
,只需提取第一个捕获组。例如:

"Name\n John".match(/Name\s+([a-zA-Z0-9]+)/)[1]; // John
var input = "Name\n John";
if (/Name\s+[a-zA-Z0-9]+/.test(input)) {
    // dosomething
} else{
    // dosomethingelse
}
但是,如果您只是使用
.test
,则不需要捕获组。例如:

"Name\n John".match(/Name\s+([a-zA-Z0-9]+)/)[1]; // John
var input = "Name\n John";
if (/Name\s+[a-zA-Z0-9]+/.test(input)) {
    // dosomething
} else{
    // dosomethingelse
}
此外,如果您需要确保
Name
John
出现在单独的行中,中间只有空格,则可以将此模式与多行(
m
)标志一起使用


您不需要在此处进行前瞻,只需将名称放在要匹配的字符之前即可。要启用不区分大小写的匹配,请将
i
修饰符放在正则表达式的末尾

var str = 'Name\n   John'
var re  = /Name\s+[a-z0-9]+/i

if (re.test(str)) {
  // do something
} else {
  // do something else
}
如果要从字符串中提取名称,请使用字符串
匹配
方法

'Name\n   John'.match(/Name\s+([a-z0-9]+)/i)[1];

这里的
[1]
引用了捕获组
#1

@plalx中匹配/捕获的内容。(示例字符串只有空格)我同意OP看起来很困惑,因为他自相矛盾。“在Name:”之后匹配John(不区分大小写),然后是“逻辑:获取一个在行空间中后跟Name的字母/数字字符串”。@Matthew你能编辑这个问题来澄清你到底想要什么吗?您希望文本位于名称之后还是之前?它是否应该包含冒号(
名称:
)?@Matthew好的,我提供了一个示例,希望对您有所帮助。然而,通过编辑,这听起来有点像一个错误。如果是这样的话,我建议您编写一个JSFIDLE来演示这个问题以及您迄今为止解决这个问题的最佳尝试,并将其包含在一个新的问题中,关于您实际要实现的目标。如果上下文有帮助,请包含一个指向此问题的链接。@p.s.w.g谢谢您的帮助!