我需要像这样分割一个字符串
var val = "$cs+55+mod($a)";
进入数组
arr = val.split( /[+-/*()\s*]/ );
问题是将拆分器字符保持为数组元素,如
arr = [ '$cs', '+', '55', 'mod', '(', '$a', ')' ]
而不喜欢
arr = [ '$cs', '55', 'mod', '$a' ]
答案 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)
我的问题已经解决但尚未完成。
以下是更详细的用法
$(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,你们都可以看到我正在做的事情。