正则表达式与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是的,我在没有\??
的情况下尝试了它,效果很好。谢谢你们俩的帮助