.split()维护分裂字符

时间:2015-03-07 15:58:19

标签: javascript regex split

我需要像这样分割一个字符串

var val = "$cs+55+mod($a)";

进入数组

arr = val.split( /[+-/*()\s*]/ );

问题是将拆分器字符保持为数组元素,如

arr = [ '$cs', '+', '55', 'mod', '(', '$a', ')' ]

而不喜欢

arr = [ '$cs', '55', 'mod', '$a' ]

2 个答案:

答案 0 :(得分:4)

您应该使用match代替split

"$cs+55+mod($a)".match(/([+-/*()\s*]|[^+-/*()\s*]+)/g);

说明:

[+-/*()\s*]    -- Your provided regex
[^+-/*()\s*]+  -- Negation of the above regex using ^ and mentioning that could be more than one letter by using +

答案 1 :(得分:0)

谢谢大家的帮助。

我的问题已经解决但尚未完成。

以下是更详细的用法

jsfiddler

$(function() {
var tags = [
    '$c[8][clientes][clientes_iva]',
    '$c[8][paises_iva][paises_iva]',
    '$c[8]',
    'mod(',
    '$user'
];

function split( val ) {
    var arr = val.split( /([+-\/*()\s*]|[^+-\/*()\s*]+)/g );
    return arr;
}

function extractLast( term ) {
    return split( term ).pop();
}

$( "#condition" )
    .bind("keydown", function( event ) {
        if ( event.keyCode === $.ui.keyCode.TAB && $( this ).autocomplete( "instance" ).menu.active ) {
            event.preventDefault();
        }
    })
    .autocomplete({
        minLength: 0,
        source: function( request, response ) {
            response( $.ui.autocomplete.filter( tags, extractLast( request.term ) ) );
        },
        focus: function() {
            return false;
        },
        select: function( event, ui ) {
            var terms = split(this.value);
            terms.pop();
            terms.push( ui.item.value );
            this.value = terms.join( "" );
            return false;
        }
    });

});

我做了Video,你们都可以看到我正在做的事情。