匹配字符串,如果它出现在某个字符串后面

时间:2014-06-24 22:10:17

标签: javascript regex

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

我知道怎么做,但我不知道如何从不同的行(从textarea)获取字符串:

Name
  John

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

逻辑:获取一个字符串,其中包含一个字母/数字,后跟名称。

然后,我会使用.test();方法。


修改

我试图让问题变得更加简单。我不太明白的是我如何孤立" John" (实际上是任何东西)在一个新行后跟一个特定的字符串(在这种情况下是Name)。


IF John来自Name {dosomething} else {dosomethingelse}

2 个答案:

答案 0 :(得分:2)

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

var str = /Name\s+([a-zA-Z0-9]+)/;

如果您想获得John,则必须提取第一个捕获组。例如:

"Name\n John".match(/Name\s+([a-zA-Z0-9]+)/)[1]; // John

但是,如果您只使用.test,则不需要捕获组。例如:

var input = "Name\n John";
if (/Name\s+[a-zA-Z0-9]+/.test(input)) {
    // dosomething
} else{
    // dosomethingelse
}

此外,如果您需要确保NameJohn出现在单独的行中,而中间只有空格,则可以将此模式与多行(m)一起使用标志。

var str = /Name\s*^\s*([a-zA-Z0-9]+)/m;

答案 1 :(得分:1)

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

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

if (re.test(str)) {
  // do something
} else {
  // do something else
}

如果要从字符串中提取名称,请使用字符串match方法。

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

此处的[1]会返回捕获组#1中匹配/捕获的内容