7 回答

TA貢獻2021條經驗 獲得超8個贊
var arr = [];
var str = "#你好##234:wdwww#+@eeur_222@";
str.replace(/[#@]([^#@]+)[#@]/g, function (a, $1) {
arr.push($1);//$1為匹配結果 '你好', '234:wdwww' 等
});
console.log(arr)//[ "你好", "234:wdwww", "eeur_222" ]
不知道你是不是#開頭必須#結尾 還是@結尾也可以
頭部和尾部一致:
var arr = [];
var str = "#你好@#234:wdwww#+@eeur_222@";
str.replace(/([#@])([^#@]+)\1/g, function (a, $1,$2) {
arr.push($2)
});
console.log(arr)//[ "234:wdwww", "eeur_222" ]

TA貢獻2037條經驗 獲得超6個贊
可以試下。
/#(.+?#)|@(.+?@)/g
分析:從左到右
.+
匹配除換行符 n 之外的任何單字符 「1次以上」?#
非貪婪查找,第一個#
停止匹配|
右側是另一種匹配規(guī)則,匹配@

TA貢獻1815條經驗 獲得超13個贊
第一種:
var result=str.match(/#[^#]*#|@[^@]*@/g).map(function(item,index){
return item.replace(/^[#@]|[#@]$/g,'');
});
第二種:
var arr=[];
var reg=/#([^#]*)#|@([^@]*)@/g;
var matchs=null;
while((matchs=reg.exec(str))!=null){
arr.push(matchs[1]?matchs[1]:matchs[2]);
}

TA貢獻1951條經驗 獲得超3個贊
'#你好##234:wdwww#+@eeur_222@'.match(/#(.+?#)|@(.+?@)/g).map(str=>str.slice(1,-1))
這邊應該可以達到題主的要求,最早沒有使用非貪婪匹配,導致一直匹配到最大子串
添加回答
舉報