【问题标题】:JavaScript regex: Positive lookbehind alternative (for Safari and other browsers that do not support lookbehinds)JavaScript regex: Positive lookbehind alternative (for Safari and other browsers that do not support lookbehinds)
【发布时间】:2023-01-12 05:02:55
【问题描述】:

我正在为此寻找替代方案:

(?<=\.\d\d)\d

(匹配句点后的第三个数字。)

我知道我可以使用其他方法解决它,但我必须使用正则表达式,更重要的是我必须在字符串上使用替换,而不添加回调。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    将 lookbehind 转换为消费模式并使用捕获团体:

    并按如下所示使用它:

    var s = "some string.005";
    var rx = /.dd(d)/;
    var m = s.match(/.dd(d)/);
    if (m) {
      console.log(m[1]);
    }

    或者,获取所有匹配项:

    const s = "some string.005 some string.006";
    const rx = /.dd(d)/g;
    let result = [], m;
    while (m = rx.exec(s)) {
      result.push(m[1]);
    }
    console.log( result );

    matchAll 的例子:

    const result = Array.from(s.matchAll(rx), x=>x[1]);
    

    编辑:

    要使用您当前的规范从 str.123 中删除 3,请使用相同的捕获方法:捕获您需要的内容并使用替换模式中的 $n 反向引用在结果中恢复捕获的文本,并且只匹配您需要删除的内容。

    var s = "str.123";
    var rx = /(.dd)d/; 
    var res = s.replace(rx, "$1");
    console.log(res);

    【讨论】:

    • 不幸的是我不能使用匹配,就像我说的我必须在没有回调的情况下使用替换,所以使用捕获组是不适用的。
    • 好吧,我明白了。然后,仍然可以使用相同的方法:匹配您不需要的和匹配并捕获您需要的。试试var res = s.replace(/^.*.dd(d).*/, "$1")
    • 预期的行为是 var s = "str.123" s.replace(/(?&lt;=.dd)d/, ''); // S is now "str.12" 很抱歉没有更清楚地说明这一点。
    • 好的,你有 str.123 值。你是想用replace获取3吗?我的更新实际上为 str.123 输入返回 3
    • 不,3应该被replace从字符串中删除。
    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 2021-10-01
    • 2022-12-27
    • 1970-01-01
    • 2022-12-01
    • 2020-02-16
    • 2022-12-27
    • 1970-01-01
    相关资源
    最近更新 更多