JavaScript RegEx从开始位置删除@符号

时间:2014-10-14 13:00:57

标签: javascript regex regex-negation

I want modify my regular expression to also remove @ size but select only that word those are start with @ sign.

以下是我的代码,查看 Live

JS

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"] 

2 个答案:

答案 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))