有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

regex正则表达式在regex101上工作。com,但不是prod

https://regex101.com/r/sB9wW6/1

(?:(?<=\s)|^)@(\S+)<;-积极回顾中的问题

prod(?:\s|^)@(\S+)上这样工作,但我需要一个正确的开始索引(没有空格)

以下是JS:

var regex = new RegExp(/(?:(?<=\s)|^)@(\S+)/g);

Error parsing regular expression: Invalid regular expression: /(?:(?<=\s)|^)@(\S+)/

我做错了什么

更新

好的,JS中没有后顾:(

但无论如何,我需要一个正则表达式来获得比赛的正确开始和结束索引。没有引导空间


共 (1) 个答案

  1. # 1 楼答案

    确保始终在regex101中选择正确的正则表达式引擎。com。查看由于使用JS-only compatible regex with ^{} construct in Python而发生的问题

    在回答这个问题时,JS regex-,不支持lookbehinds。现在,它在its introduction in ECMAScript 2018之后越来越多地被采用。您在这里并不真正需要它,因为您可以使用捕获组:

    var re = /(?:\s|^)@(\S+)/g; 
    var str = 's  @vln1\n@vln2\n';
    var res = [];
    while ((m = re.exec(str)) !== null) {
      res.push(m[1]);
    }
    console.log(res);

    (?:\s|^)@(\S+)将一个空格或字符串的开头与(?:\s|^)匹配,然后与@匹配,然后将(\S+)匹配并捕获到组1中的一个或多个非空格字符

    要获取开始/结束索引,请使用

    var re = /(\s|^)@\S+/g; 
    var str = 's  @vln1\n@vln2\n';
    var pos = [];
    while ((m = re.exec(str)) !== null) {
      pos.push([m.index+m[1].length, m.index+m[0].length]);
    }
    console.log(pos);

    奖金

    我的regex在regex101工作。com,但不是在