从可选模式获取子字符串
Get substring from an optional pattern
我正在尝试解析以下URL:
http://localhost:30001/catalog/search?tags=bed-green-big-33-22-ancient-5--2
地点:
-
bed-green-big-33-22-ancient-5
is 1 Group (filters) -
--2
是组2 [PageNumber]和它是可选的
我的regex尝试是:
tags=(.*)--('d*)
它的工作原理,因为它捕获了我所需要的,但它没有考虑到可选的--2
在最后。
结果应为:bed-green-big-33-22-ancient-5
, 2
。
让我们考虑一个简单的单正则表达式方法。
由于您的字符串在查询字符串中,您可能需要注意参数边界(&
和初始?
),并在模式开始时使用[&?]
。现在,.*
将匹配所有内容,即使你有超过1个参数。为了确保匹配与-
分隔的组,但在&
之后不会过度匹配,您可以使用否定的字符类 [^&-]
接下来要考虑的是可选部分--<NUMBER>
。您需要对字符进行分组,并将?
量词应用于该组,使其成为"可选的"一次(?
表示匹配1或0次)。为了使我们的匹配结果更清晰,建议使用非捕获组。
所以,正则表达式看起来像:
[&?]tags=([^&-]*(?:-[^&-]+)*)(?:--('d+))?
^ | Main || ^Grp2^|
Start | capture || |
boundary | group || Optional |
请参阅regex demo(由于这是一个多行演示,因此添加了'n
)。
JS:
var re = /[&?]tgs=([^&'n-]*(?:-[^&'n-]+)*)(?:--('d+))?/;
var str = 'http://localhost:30001/catalog/search?tags=bed-green-big-33-22-ancient-5--2';
var m = str.match(re);
if (m !== null) {
document.getElementById("r").innerHTML = "First part: <b>" + m[1] + "</b><br/>Second part: <b>" + m[2] + "</b>";
}
<div id="r"/>
看看http://regex101.com。它会给你一个分解,你的正则表达式正在做什么,以及它匹配什么。
由于这是一个相当简单的正则表达式,我不打算直接给你,因为我认为你正在学习正则表达式,但我会给你一些提示,让你开始。
可以使用括号()创建组。考虑一下您需要从哪里开始匹配一个组,并匹配到该点的URL,然后启动您的组以提取您的标签字符串。一旦你找到了结尾,你就有了一个"——",你可以用它来匹配你的页码的第二组的开始。
相关文章:
- 通过字符串获取JSON对象
- 将敲除绑定应用于模板,并将结果作为字符串获取
- 使用字符串获取本地对象的属性
- 如何使用 jQuery 在标签的 for 属性中使用子字符串获取标签元素的值
- 使用 Javascript 将 Java 渲染为字符串获取最终 HTML
- 如何使用正则表达式从此字符串获取电子邮件
- 维基媒体API从JSON字符串获取相关数据
- 如何使用jQuery将HTML数据值作为字符串获取
- 带有换行符的JSP+HTML-将其作为字符串获取,并删除"新线”;
- 如何从字符串获取url-jQuery或Javascript
- QML-将JS函数的代码作为字符串获取
- cookie字符串获取并设置jquery控件的属性
- 通过字符串获取HTML元素
- 从绝对url字符串获取锚值
- 在myObj.one.two.three.field中,当字段有2个或更多嵌套级别时,通过路径字符串获取对象字段
- 从带有moment的非本地ISO8601字符串获取时间(小时,分钟)
- 使用javascript使用parseFloat和parseInt无法正常工作的字符串获取价格
- 如何从json字符串获取键值
- 使用javascript从给定字符串获取电子邮件id
- 从Json字符串获取数据到javascript (jQuery)