3

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

示例:“2012 年 9 月 19 日星期三 08:05:07 GMT-0700 (PDT)”转换为“2012 年 9 月 19 日星期三”

4

5 回答 5

14
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并使用limit参数 ofsplit()代替:

var s = "Wed Sep 19 2012 08:05:07 GMT-0700 (PDT)";
var newValue = s.split(' ', 4).join(' ');
于 2012-09-23T23:42:55.067 回答
0

你真的需要正则表达式吗?这是一个非常标准化的日期字符串... 3 个字符的工作日、3 个字符的月份、2 个字符的日期、4 个字符的年份...唯一的问题是天数是否用零填充。

str.substring(0,15);

如果没有填充天数,那么如果第 15 个字符是空格,则取 14 个字符。不然上面的就好了。

于 2012-09-23T23:47:35.453 回答
0

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

text = text.replace(/^((?:[^ ]* ){3}[^ ]*) [\S\s]*/, "$1");
于 2012-09-23T23:55:30.657 回答
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 的建议做更多的正常处理。

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

于 2012-09-23T23:58:55.297 回答
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 的子字符串将返回“2012 年 9 月 19 日星期三”所需的结果。

于 2012-09-25T06:34:58.903 回答