I want modify my regular expression to also remove @ size but select only that word those are start with @ sign.
以下是我的代码,查看 Live
var a = "@abc @jat hi pat @jkl abc @cde vcd @cde ";
var s = a.match(/(?=(\s{1}?@[^\s]+)|(\s?))(@[^\s]+)(?=(\s))/g);
console.log(s);
["@abc", "@jat", "@jkl", "@cde", "@cde"]
["abc", "jat", "jkl", "cde", "cde"]
答案 0 :(得分:2)
由于JavaScript没有后视,我认为你不能在一个match
语句中做到这一点(没有后期处理),因为你需要一个捕获组。
对于ES5的Array#map
(可以填充),后处理是微不足道的,当然:
var s = a.match(/(?=(\s{1}?@[^\s]+)|(\s?))(@[^\s]+)(?=(\s))/g).map(function(entry) {
return entry.substring(1);
});
否则,您将需要使用捕获组和exec
循环。
\s
分离:
var a = "@abc @jat hi pat @jkl abc @cde vcd @cde ";
var s = a.match(/@\S+/g).map(function(entry) {
return entry.substring(1);
});
display(s.join(", "));
function display(msg) {
document.body.insertAdjacentHTML(
"beforeend",
"<p>" + msg + "</p>"
);
}
答案 1 :(得分:1)
除非有一些令人信服的理由,你需要为此编写一个正则表达式,否则只需做一些标准的拆分和过滤就可以多。
a.split(/\s+/)
.filter(function(seg) { return seg[0]==='@'; })
.map (function(seg) { return seg.slice(1); })
如果你可以使用箭头功能,那看起来并不是那么糟糕:
a.split(/\s+/)
.filter(seg => seg[0]==='@')
.map (seg => seg.slice(1))