正则表达式:分割字符串但捕获分隔符

6

我有一个字符串,例如"dd month yyyy",我想将其拆分并转换为数组 ["dd", " ", "month", " ", "yyyy"]。

目前我已经有了一种方法,可以实现这个目的。但是我正在寻找使用正则表达式来实现的方法,如果有人能帮忙吗?

function toArray(format) {
 var vDateStr = '';
var vComponantStr = '';
var vCurrChar = '';
var vSeparators = new RegExp('[\/\\ -.,\'":]');
var vDateFormatArray = new Array();

for (var i=0; i < pFormatStr.length; i++ )
{
    vCurrChar = pFormatStr.charAt(i);
    if ( (vCurrChar.match(vSeparators) ) || (i + 1 == pFormatStr.length) ) // separator or end of string
    {
        if ( (i + 1 == pFormatStr.length) && ( !(vCurrChar.match(vSeparators) ) ) ) // at end of string add any non-separator chars to the current component
        {
            vComponantStr += vCurrChar;
        }
        vDateFormatArray.push( vComponantStr );
        if ( vCurrChar.match(vSeparators) ) vDateFormatArray.push( vCurrChar );
        vComponantStr = '';
    }
    else
    {
        vComponantStr += vCurrChar;
    }

}
return vDateFormatArray;
}

你想在数字之间保留空格“ ”吗? - KJ Price
KJ Price,是的,我希望正则表达式中的分隔符([\/\\ -.,\'":])也成为最终数组中的一个元素。在这种情况下,空格 " " 也要包括在内。 - Reddy
3个回答

5

简单:

> "10 Jan 2015".split(/\b/g)
< ["10", " ", "Jan", " ", "2015"]

这将在单词边界处分割。


这太完美了,它按照我的预期工作。非常感谢。- Reddy - Reddy

3

我假设"mm dd yyyy"实际上是数字,但这也适用于字符串。

var date ="01 02 1292";

var dateArr = date.match(/[^\s]+|\s/g);

document.write(JSON.stringify(dateArr));


这个只适用于分隔符是空格" "的情况,但如果你看了我的问题,我想要在正则表达式中使用不同的分隔符。因为格式可以使用任何分隔符(请参阅我的正则表达式)。 - Reddy

1

function toArray(format) {
  var r = new RegExp('([0-9]{2})( )([0-9]{2})( )([0-9]{4})');
  return format.match(r).slice(1);
}

document.write(JSON.stringify(toArray("30 12 1980")));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接