我有一个字符串 '/abc/x=1+2&y=25&c=1' ,其中 'x=1+2&y=25&c=1' 是一组特定的过滤器。我想编写一个函数,使用正则表达式获取每个过滤器的值,即:
1) getSubString(str, 'x') - должна вернуть '1+2'
2) getSubstring(str, 'y') - должна вернуть '25'
3) getSubstring(str, 'c') - должна вернуть '1'
到目前为止,我的功能如下所示:
const getSubString = (pathname, filterName) => {
const regexp = new RegExp(`${filterName}=(.*)&`);
return pathname.match(regexp)[1];
}
我不明白两件事:
- 在第一种情况下,'1+2&y=25' 被返回给我,也就是说,由于某种原因,搜索到了字符串中的最后一个字符 &。如何从我传入的“x”进行引擎搜索,直到第一次出现 &?
- 在第三种情况下,引擎找不到任何匹配项,因为 在正则表达式中由最后一个字符 & 表示。当可能以 & 或行尾结尾时如何处理这种情况?我试图用 (&|\z) 结束正则表达式 - 它没有用。
在表达式中,
(.*)&
第一个模式捕获 0 个或多个非换行符,直到&
.在这种情况下,您希望查找直到第一次(最近)出现的字符
&
或直到字符串结尾的文本:在上面列出的三种模式
([^&]*)
中,它是最快的,并且还可以找到换行符。利用/
要仅在,?
or之后匹配&
,请将正则表达式更改为查看表达式如何工作的示例。