删除部分
没有为一个div一个数据参数如下所示:删除部分
<div data-params="[possibleText&]start=2011-11-01&end=2011-11-30[&possibleText]">
</div>
我想通过第二日期的从该数据端部,以除去从start
-params属性。在start
之前和第二次日期之后的日期之后可能有或没有文字。
我该如何使用javascript或jQuery来完成此操作?我知道如何获得“data-params”属性的值以及如何设置它,我只是不确定如何从字符串中删除该部分。
谢谢!
注:日期并不总是相同的。
我会使用一个regular expression:
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]
是结束日期(第二个小组)。
谢谢!真的很好地解释了答案。对此,我真的非常感激! – dmr
我的正则表达式的技巧都不甚理想,但是这应该这样做
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中间去掉了开始/结束的东西。
假设你有你的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"]
我的正则表达式比其他类型的表达式要简单得多,并且可以用于从任何类似查询字符串的数据中解析params。 –
你要删除比其他一切'开始= 2011-11-01&结束= 2011-11-30'还是要保留一切并去掉了'开始= 2011 -11-01&end = 2011-11-30'? – omarello
@omarello保留一切,并删除'开始... 11-30' – dmr
你可能想在问题中更清楚一点:) – omarello