删除第4个空格后的字符串的所有字符

时间:2012-09-23 23:41:47

标签: javascript regex

我正在寻找一种方法来在javascript中使用正则表达式删除字符串中的第4个空格。

实施例: “Wed Wed 19 2012 08:05:07 GMT-0700(PDT)” 成 “2012年9月19日星期三”

5 个答案:

答案 0 :(得分:12)

var s = "Wed Sep 19 2012 08:05:07 GMT-0700 (PDT)";
s.split(' ').slice(0, 4).join(' ');

步骤一步:

> s.split(' ')
["Wed", "Sep", "19", "2012", "08:05:07", "GMT-0700", "(PDT)"]
> s.split(' ').slice(0, 4)
["Wed", "Sep", "19", "2012"]
> s.split(' ').slice(0, 4).join(' ')
"Wed Sep 19 2012"

或者删除slice并使用split()limit参数代替:

var s = "Wed Sep 19 2012 08:05:07 GMT-0700 (PDT)";
var newValue = s.split(' ', 4).join(' ');

答案 1 :(得分:0)

你真的需要regexp吗?这是一个非常标准化的日期字符串... 3个字符的工作日,3个字符的月份,2个字符的日子,4个字符的年份...唯一的问题是日期编号是否填充为零。

str.substring(0,15);

如果没有填充日期编号,那么如果第15个字符是空格,则需要14个字符。否则上述情况会没问题。

答案 2 :(得分:0)

以下内容从字符串中删除第四个空格(及其后面的所有内容):

text = text.replace(/^((?:[^ ]* ){3}[^ ]*) [\S\s]*/, "$1");

答案 3 :(得分:0)

虽然正则表达式不是最好的,但您可以这样做:

var string = "Wed Sep 19 2012 08:05:07 GMT-0700 (PDT)";
var regex = /^((\S+\s*?){4})(\s+.*)$/;
var stripped = string.replace(regex, "$1");

匹配4个非空格,后跟空格,然后是行的末尾。替换使用第一个匹配并忽略其余匹配。

第一组内的\s延迟匹配,因此结束空格会自动删除。不幸的是,这会使正则表达式变慢,但在典型输入上却不会明显。

但是,如果您正在尝试解析ISO标准日期字符串,那么paddy是正确的,您应该切断结束。你也可以像Joao所说的那样做,并做更多的正常处理。

请记住,正则表达式可能不是您想要的大部分时间。它们实际上是相当粗糙的工具......

答案 4 :(得分:0)

我觉得如果我们使用正则表达式搜索模式并从该点截断字符串会更好。

var str = "Wed Sep 19 2012 08:05:07 GMT-0700 (PDT)";
var regEx = new RegExp("\\s\\d+\\:"); // pattern match for ' dd:'
var truncatedStr = str.substring(0, str.search(regEx));

我们知道我们不希望在此之前使用字符串。因此,我们将创建一个正则表达式来匹配'dd:'的时间模式。现在,如果我们使用str.search(regEx),它将返回模式的起始索引。在这种情况下,这将是15.因此,在主字符串上从0到15的子字符串将返回“Wed Sep 19 2012”的所需结果。

相关问题