鍍金池/ 問答/Java  HTML/ js正則表達式匹配以特殊字符開始和結束問題

js正則表達式匹配以特殊字符開始和結束問題

現(xiàn)在需要正則表達式匹配以#或者 @開始并且以#或者 @結束的字符,例如#你好##234:wdwww#+@eeur_222@

需要獲取結果為你好,234:wdwww,eeur_222,求問如何實現(xiàn)。

回答
編輯回答
故人嘆

"#asdfasdf# #asdf# 哈哈哈 @阿斯頓發(fā)斯蒂芬 @ # #".match(/#[^#]+#/g)

是這個意思嗎?

2017年8月31日 10:54
編輯回答
熊出沒

clipboard.png

2017年7月26日 10:29
編輯回答
凝雅

str.split(/[#@]/).join("").split(/^[#@]/).join("")

2018年2月10日 02:15
編輯回答
拽很帥

可以試下。

/#(.+?#)|@(.+?@)/g

分析:從左到右

  • .+ 匹配除換行符 n 之外的任何單字符 「1次以上」
  • ?# 非貪婪查找,第一個#停止匹配
  • | 右側是另一種匹配規(guī)則,匹配@
2018年4月27日 18:43
編輯回答
亮瞎她

第一種:

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]);
}
2018年5月31日 00:24
編輯回答
扯不斷
'#你好##234:wdwww#+@eeur_222@'.match(/#(.+?#)|@(.+?@)/g).map(str=>str.slice(1,-1))

這邊應該可以達到題主的要求,最早沒有使用非貪婪匹配,導致一直匹配到最大子串,這里感謝@丘山 提供的非貪婪匹配的思路

2017年9月14日 12:22
編輯回答
菊外人
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" ]
2018年3月15日 10:40