div的数据参数如下所示:
<div data-params="[possibleText&]start=2011-11-01&end=2011-11-30[&possibleText]">
</div>
我想从第二个日期结束时从{data-params属性中删除start
。在start
之前和第二次约会之后的日期之后可能会有或可能没有文字。
如何使用javascript或jQuery实现此目的?我知道如何获取“data-params”属性的值以及如何设置它,我只是不确定如何从字符串中删除该部分。
谢谢!
注意:日期并不总是相同。
答案 0 :(得分:2)
var text = $('div').attr('data-params');
var dates = text.match(/start=\d{4}-\d{2}-\d{2}&end=\d{4}-\d{2}-\d{2}/)[0]
// dates => "start=2011-11-01&end=2011-11-30"
正则表达式不太复杂。符号\d
表示“匹配任何数字”,\d{4}
表示“恰好匹配4位数字”。其余的是字面字符。所以你可以看到它是如何工作的。最后,最后[0]
是因为javascript match返回一个数组,其中第一个元素是整个匹配,其余元素是子组。我们没有任何子组,我们确实需要整个匹配,所以我们只抓取第一个元素,因此[0]
。
如果您想拉出实际日期而不是完整的查询字符串,可以通过在所需部分周围添加括号来创建要匹配的子组,如下所示:
var dates = text.match(/start=(\d{4}-\d{2}-\d{2})&end=(\d{4}-\d{2}-\d{2})/)
// dates[0] => "start=2011-11-01&end=2011-11-30"
// dates[1] => "2011-11-01"
// dates[2] => "2011-11-30"
此处,dates[1]
是开始日期(基于括号的第一个子组),dates[2]
是结束日期(第二个子组)。
答案 1 :(得分:1)
我的正则表达能力不是那么好但是应该这样做
var txt = "[possibleText&]start=2011-11-01&end=2011-11-30[&possibleText]";
var requiredTxt = txt.replace(/^(.*)start=\d{4}-\d{2}-\d{2}&end=\d{4}-\d{2}-\d{2}(.*)$/, "$1$2");
我确信有更好的方法可以将你的字符串与正则表达式匹配,但是1美元和2美元会将第一组和第二组匹配到你的requiredTxt中去掉中间的开始/结束内容。
答案 2 :(得分:1)
假设您在变量data-params
中拥有foo
。请按以下方式致电foo.match
:
foo.match("[\\?&]start=([^&#]*)"); //returns ["&start=2011-11-01", "2011-11-01"]
foo.match("[\\?&]end=([^&#]*)"); //returns ["&end=2011-11-30", "2011-11-30"]