正则表达式适用于regex101.com,但不适用于prod

时间:2016-09-22 10:06:06

标签: javascript regex

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

function(chart) { var value1 = chart.series[1].data[23].y, value2 = chart.series[1].data[24].y; chart.series[0].addPoint({ x: 23.5, y: (value1 + value2) / 2, details: 'this is an accident' }); } < - 正向背后的问题

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

这是JS:

(?:\s|^)@(\S+)
  

解析正则表达式时出错:正则表达式无效:   /(?:?(小于= \ S)| ^)@(\ S +)/

我做错了什么?

更新

好的,JS中没有任何后盾:(

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

1 个答案:

答案 0 :(得分:4)

JS正则表达式不支持lookbehinds。你真的不需要它,因为你可以使用捕获组:

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|^)匹配,然后匹配@,然后匹配并捕获到组1中一个或多个带有(\S+)的非空白字符。

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

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