Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于匹配各种字符串的Javascript正则表达式_Javascript_Regex - Fatal编程技术网

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

用于匹配各种字符串的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将是一个已找到字符串的数组

我有一个无法解决的问题。我有包含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将是一个已找到字符串的数组,如果未找到任何字符串,则为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
您是否有固定的标记集,它们是否只能包含字母、数字或其他字符

你可以在线查看你的正则表达式