尝试解析以下文本:
这是[姓名] John的[/ name]之一 第一个教程。
或
请邀请[姓名]史蒂文[/姓名]来 会议。
我需要的是在Javascript中使用regexp来获取名称。
做var str = body.match(/[name](.*?)[\/name]/g);
有效,但我如何才能得到它?
答案 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.$1
,RegExp.$2
一直到RegExp.$9
来访问括号内的部分。在这种情况下,RegExp.$1
将包含[name]
和[/name]
之间的文字。