【问题标题】:JavaScript RegExp to remove @ sign from starting positionJavaScript RegExp 从起始位置删除 @ 符号
【发布时间】:2014-12-09 06:54:43
【问题描述】:

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

【问题讨论】:

    标签: javascript regex regex-negation


    【解决方案1】:

    由于 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>"
      );
    }

    【讨论】:

    • 感谢您的回答,但我无法访问其他功能(如地图)来存档此内容。你能修改我的正则表达式模式来存档吗?谢谢
    • @user1153551:不,我不能。而且我怀疑其他人也不能,因为我上面给出的原因(JavaScript 没有后视)。
    • 我不确定,但可能是 Python RegExp 有这个选择协商。而且JS没有惊喜
    • @user1153551:不同语言中不同风格的正则表达式具有不同的功能。这个site 是一个很好的资源,因为它讨论了很多差异。
    • 好的,没问题,我会这样做,谢谢 Matt Burland 和 T.J.克劳德
    【解决方案2】:

    除非有一些令人信服的理由需要为此编写一个正则表达式,否则您最好只进行一些标准的拆分和过滤。

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

    【讨论】:

      猜你喜欢
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 2021-06-15
      • 1970-01-01
      • 2013-01-11
      • 2013-10-01
      • 1970-01-01
      相关资源
      最近更新 更多