2016-09-22 52 views
0

https://regex101.com/r/sB9wW6/1正则表达式适用于regex101.com,但不能在PROD

(?:(?<=\s)|^)@(\S+) < - 正回顾后

问题上prod工作是这样的:(?:\s|^)@(\S+),但我需要一个正确的开始索引(不空间)。

以下是在JS:

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

错误解析正则表达式:无效的正则表达式: /(?:(< = \ S)| ^)@(\ S +)/

我在做什么错?

UPDATE

好,在JS没有回顾后:(

但不管怎么说,我需要一个正则表达式来让我的比赛的正确起点和终点指标,如果没有领先的空间。

+3

有在Javascript – anubhava

+0

哦,不回顾后,THX! :D我不知道:D Erm ...任何想法我怎么能达到我的目标? :) – Kindzoku

+0

下次要小心并选择'JavaScript' [像这样](https://regex101.com/r/sB9wW6/2) –

回答

4

JS正则表达式不支持向后看,因为你可以使用捕获组,因此你并不需要它:

var re = /(?:\s|^)@(\S+)/g; 
 
var str = 's @vln1\[email protected]\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\[email protected]\n'; 
 
var pos = []; 
 
while ((m = re.exec(str)) !== null) { 
 
    pos.push([m.index+m[1].length, m.index+m[0].length]); 
 
} 
 
console.log(pos);

+0

我的主要目标是获得开始和结束索引。 – Kindzoku

+0

什么指标? '@'后面的位置? –

+0

'@'的索引和单词的结尾。现在在字符串开始的情况下,我得到0,在中间文本的情况下 - 索引-1(匹配空间的coz) – Kindzoku

相关问题