我有一个我无法解决的问题。我有包含主题标签的字符串,例如'#question'或'#idea'。
问题是如何提取主题标签?
var hashtag = str.match(/#question?#idea?/i);
这个正则表达式是否正确?
答案 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。