我想提取以下字符串的部分内容:
#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}
,这意味着您的文字 ?
可以存在或不存在
关于javascript - 正则表达式与 Javascript 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47541311/