Javascript正则表达式匹配各种字符串

时间:2011-03-21 11:37:54

标签: javascript regex

我有一个我无法解决的问题。我有包含主题标签的字符串,例如'#question'或'#idea'。

问题是如何提取主题标签?

var hashtag = str.match(/#question?#idea?/i);

这个正则表达式是否正确?

3 个答案:

答案 0 :(得分:3)

你的行

var hashtag = str.match(/#question?#idea?/i);

检查字符串是否包含文字#questio,后跟n,后跟#ide,后跟a。如果是这种情况,hashtag[0]将包含匹配的文本。这显然不是你想要的。

试试这个:

// match a #, followed by either "question" or "idea"
var myregexp = /#(question|idea)\b/i;
var match = myregexp.exec(subject);
if (match != null) {
    result = match[1]; // will contain "question" or "idea"
} else {
    result = "";
}

正则表达式末尾的\b是一个单词边界锚点。它确保只匹配#question但不匹配#questionnaire

如果您事先不知道主题标签的名称,请使用

var myregexp = /#(\w+)/;

(这允许ASCII字母,数字和下划线作为可能的主题标签字符 - 我不知道这些是否是唯一有效的字符。如果不是,您可以使用字符类。例如,也允许破折号:< / p>

var myregexp = /#([\w-]+)/;

答案 1 :(得分:1)

你的正则表达式不正确。

/#question?#idea?/i

按此顺序搜索正则表达式中的每个字符。 ?使得前面的字符变为0或1次,最后的i使表达式成为ignoreCase,即将大写和小写视为相同。你会发现:

#question#idea
#questio#ide
#questio#idea
#QUEStion#IDea

但不是

#question
#idea

你有一组固定的标签,它们只能包含字母,还包含数字或其他字符?

您可以查看正则表达式,例如在线My example

答案 2 :(得分:0)


var str = "/foo=bar?#quesAion#dwdad";
var regi = new RegExp("(#[a-z0-9_-]*)", "gi");
var hashtag = str.match(regi);

Hashtag将是找到的字符串数组,如果没有找到,则为null。