.split()维护拆分字符

.split() maintaining splitting character

本文关键字:拆分 字符 维护 split      更新时间:2023-09-26

我需要拆分这样的字符串

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;
        }
    });

});

我制作了一个视频,你们都可以看到我在做什么。