JavaScript正则表达式

时间:2011-03-07 18:55:26

标签: javascript regex

尝试解析以下文本:

  

这是[姓名] John的[/ name]之一   第一个教程。

  

请邀请[姓名]史蒂文[/姓名]来   会议。

我需要的是在Javascript中使用regexp来获取名称。 做var str = body.match(/[name](.*?)[\/name]/g);有效,但我如何才能得到它?

4 个答案:

答案 0 :(得分:5)

尝试使用正则表达式的“exec”方法将匹配组作为数组获取:

var getName = function(str) {
  var m = /\[name\](.*?)\[\/name\]/.exec(str);
  return (m) ? m[1] : null;
}

var john = getName("This is one of [name]John's[/name] first tutorials.");
john // => "John's"
var steve = getName("Please invite [name]Steven[/name] to the meeting.");
steve // => "Steven"

这可以通过使用全局RegExp来轻松扩展以查找所有出现的名称:

var getAllNames = function(str) {
  var regex = /\[name\](.*?)\[\/name\]/g
    , names = []
    , match;
  while (match = regex.exec(str)) {
    names.push(match[1]);
  }
  return names;
}

var names = getAllNames("Hi [name]John[/name], and [name]Steve[/name]!");
names; // => ["John", "Steve"]

答案 1 :(得分:3)

您想要访问匹配的组。有关解释,请参见此处: How do you access the matched groups in a JavaScript regular expression?

答案 2 :(得分:3)

你在正则表达式中犯了一个错误,你必须转义括号:\[name\]。在正则表达式中写[name]意味着应该有'n'或'a'或'm'或'e'。在你的情况下,你只想告诉你要找到以'[name]'开头的字符串

共:

/\[name\](.*?)\[\/name\]/g.exec('Please invite [name]Steven[/name] to the meeting.');
console.info( RegExp.$1 ) // "Steven"

答案 3 :(得分:0)

您可以使用RegExp.$1RegExp.$2一直到RegExp.$9来访问括号内的部分。在这种情况下,RegExp.$1将包含[name][/name]之间的文字。