用于匹配各种字符串的Javascript正则表达式
我有一个无法解决的问题。我有包含hashtags的字符串,例如“#问题”或“#想法” 问题是如何提取标签用于匹配各种字符串的Javascript正则表达式,javascript,regex,Javascript,Regex,我有一个无法解决的问题。我有包含hashtags的字符串,例如“#问题”或“#想法” 问题是如何提取标签 var hashtag = str.match(/#question?#idea?/i); 这个regexp正确吗 var str = "/foo=bar?#quesAion#dwdad"; var regi = new RegExp("(#[a-z0-9_-]*)", "gi"); var hashtag = str.match(regi); Hashtag将是一个已找到字符串的数组
var hashtag = str.match(/#question?#idea?/i);
这个regexp正确吗
var str = "/foo=bar?#quesAion#dwdad";
var regi = new RegExp("(#[a-z0-9_-]*)", "gi");
var hashtag = str.match(regi);
Hashtag将是一个已找到字符串的数组,如果未找到任何字符串,则为null
Hashtag将是一个找到的字符串数组,如果没有找到,则为null。您的行
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
是一个单词边界锚。它确保只匹配#问题
,而不匹配#问卷
如果您事先不知道hashtag的名称,请使用
var myregexp = /#(\w+)/;
(这允许ASCII字母、数字和下划线作为可能的标签字符-我不知道这些是否是唯一有效的字符。如果不是,您可以使用字符类。例如,允许破折号:
var myregexp = /#([\w-]+)/;
你的线路
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
是一个单词边界锚。它确保只匹配#问题
,而不匹配#问卷
如果您事先不知道hashtag的名称,请使用
var myregexp = /#(\w+)/;
(这允许ASCII字母、数字和下划线作为可能的标签字符-我不知道这些是否是唯一有效的字符。如果不是,您可以使用字符类。例如,允许破折号:
var myregexp = /#([\w-]+)/;
不,你的正则表达式不正确
/#question?#idea?/i
您可以按以下顺序搜索正则表达式中的每个字符。?
使字符在前面出现0或1次,最后的i使表达式ignoreCase,即将大写和小写处理为相同。您将发现:
#question#idea
#questio#ide
#questio#idea
#QUEStion#IDea
但不是
#question
#idea
您是否有固定的标记集,它们是否只能包含字母、数字或其他字符
您可以检查您的正则表达式,例如,在线此处否您的正则表达式不正确
/#question?#idea?/i
您可以按以下顺序搜索正则表达式中的每个字符。?
使字符在前面出现0或1次,最后的i使表达式ignoreCase,即将大写和小写处理为相同。您将发现:
#question#idea
#questio#ide
#questio#idea
#QUEStion#IDea
但不是
#question
#idea
您是否有固定的标记集,它们是否只能包含字母、数字或其他字符
你可以在线查看你的正则表达式