2011-12-01 98 views
0

没有为一个div一个数据参数如下所示:删除部分

<div data-params="[possibleText&]start=2011-11-01&end=2011-11-30[&possibleText]"> 
</div> 

我想通过第二日期的从该数据端部,以除去从start -params属性。在start之前和第二次日期之后的日期之后可能有或没有文字。

我该如何使用javascript或jQuery来完成此操作?我知道如何获得“data-params”属性的值以及如何设置它,我只是不确定如何从字符串中删除该部分。

谢谢!

注:日期并不总是相同的。

+0

你要删除比其他一切'开始= 2011-11-01&结束= 2011-11-30'还是要保留一切并去掉了'开始= 2011 -11-01&end = 2011-11-30'? – omarello

+0

@omarello保留一切,并删除'开始... 11-30' – dmr

+0

你可能想在问题中更清楚一点:) – omarello

回答

2

我会使用一个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]是结束日期(第二个小组)。

+0

谢谢!真的很好地解释了答案。对此,我真的非常感激! – dmr

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中间去掉了开始/结束的东西。

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"] 
+0

我的正则表达式比其他类型的表达式要简单得多,并且可以用于从任何类似查询字符串的数据中解析params。 –