正则表达式与Javascript的匹配

正则表达式与Javascript的匹配,javascript,regex,Javascript,Regex,我要提取以下字符串的部分: #string-to-extract #string-to-extract?foo1=fooA #string-to-extract?foo1=fooA&foo2=fooB 我有以下正则表达式: var pattern = /#(.*)\?{0,1}/; 但是下面的代码行: string.match(pattern); 为以上字符串提供以下结果: #string-to-extract => [1]string-to-extract

我要提取以下字符串的部分:

#string-to-extract
#string-to-extract?foo1=fooA
#string-to-extract?foo1=fooA&foo2=fooB
我有以下正则表达式:

var pattern = /#(.*)\?{0,1}/;
但是下面的代码行:

string.match(pattern);
为以上字符串提供以下结果:

#string-to-extract     =>      [1]string-to-extract
#string-to-extract?foo1=fooA     =>      [1]string-to-extract?foo1=fooA
#string-to-extract?foo1=fooA&foo2=fooB     =>      [1]string-to-extract?foo1=fooA&foo2=fooB
对于所有这些,我希望组1始终是
字符串,以便仅提取
。我的正则表达式出了什么问题?

*
的意思是“尽可能匹配所有内容,不要停止”。换句话说,在指定要查找问号之前,您的
作为组1的一部分匹配。相反,您希望匹配除问号之外的所有内容。像这样:

/#([^?]+)\??/;
[^?]
是一个字符类,意思是“匹配除此字符列表之外的任何字符”(在您的示例中是一个文字问号)。我用
+
代替
*
,意思是1或更多。你可以使用另一个
来代替
{0,1}
,这意味着你的文字
可以存在或不存在

*
意味着“匹配你能匹配的一切,不要停止”。换句话说,在指定要查找问号之前,您的
作为组1的一部分匹配。相反,您希望匹配除问号之外的所有内容。像这样:

/#([^?]+)\??/;

[^?]
是一个字符类,意思是“匹配除此字符列表之外的任何字符”(在您的示例中是一个文字问号)。我用
+
代替
*
,意思是1或更多。与
{0,1}
相反,您可以只使用另一个
,这意味着您的文本
可以存在或不存在
.match()
返回一个数组
[1]字符串以提取
我假设它在控制台中,这意味着它是一个长度为1的数组,您可以通过引用索引
[0]
来获取字符串,我会让正则表达式更简单:
/#([\w-]+)/
@maioman我怀疑要提取的
字符串只是一个占位符,可以是anything@KillzoneKid
[\w-]
扩展为
[a-zA-Z0-9.-]
,如果缺少一些字符,可以添加它
.match()
返回一个要提取的数组
[1]字符串
我假设它在控制台中,这意味着它是一个长度为1的数组,您可以通过引用索引
[0]
来获取字符串。我会让正则表达式更简单:
/#([\w-]+)/
@maioman我怀疑要提取的
字符串只是一个占位符,可能是anything@KillzoneKid
[\w-]
扩展为
[a-zA-Z0-9.-]
,如果缺少一些字符,可以添加它;您不必在字符类中转义问号……而且我假设
\??
在某种程度上是多余的,因为
\([^?]+)
做了本该做的事情。@revo是的,我在没有
\??
的情况下尝试了它,效果很好。感谢两位的帮助,您不必在字符类中转义问号……而且我认为
\??
在某种程度上是多余的,因为
\([^?]+)
做了应该做的事情。@revo是的,我在没有
\??
的情况下尝试了它,效果很好。谢谢你们俩的帮助