.split() 保持分裂特征

.split() maintaining splitting character

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

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

放入数组

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

问题是将分隔符保留为数组元素,如

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

不喜欢

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

您应该使用 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 +

第一次谢谢大家的帮助。

我的问题已经解决但还没有结束

这里有更详细的用法

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,你们都可以看到我在做什么。