如何使用正则表达式提取文本?

时间:2011-02-09 09:44:02

标签: javascript regex

我的文字

1618148163#@#JASSER-PC#-#1125015374#@#anas kayyat#-#1543243035#@#anas kayyat#-#

结果应该是:

JASSER-PC
anas kayyat
anas kayyat

我正在使用:

(?<=#@#)(.+)(?=#-#)

但它给了我:

JASSER-PC#-#1125015374#@#anas kayyat#-#1543243035#@#anas kayyat

4 个答案:

答案 0 :(得分:4)

JavaScript的正则表达式不支持后置断言(即(?<=…)(?<!…)),因此您无法使用该正则表达式。但你可以用这个:

#@#(.+)(?=#-#)

然后只取第一组的匹配字符串。此外,为了尽可能少地匹配,请使用+使+?量词非贪婪。

答案 1 :(得分:0)

JavaScript不支持lookbehinds。使量词不贪婪,并使用:

var regex = /#@#(.+?)#-#/g;
var strings = [];
var result;
while ((result = regex.exec(input)) != null) {
  strings.push(result[1]);
}

答案 2 :(得分:0)

小组(.+)将尽可能多地匹配(它是“贪婪的”)。要使其找到最小匹配,您可以使用(.+?)

答案 3 :(得分:0)

我会给你一个非正则表达式的答案,因为使用正则表达式并不总是合适的,无论是速度还是正则表达式本身的可读性:

function getText(text) {
    var arr = text.split("#@#"); // arr now contains [1618148163,JASSER-PC#-#1125015374,anas kayyat#-#1543243035,anas kayyat#-#]
    var newarr = [];

    for(var i = 0; i < arr.length; i++) {
        var index = arr[i].indexOf("#-#");

        if(index != -1) {  // if an array element doesn't contain "#-#", we ignore it
            newarr.push(arr[i].substring(0, index));    
        }
    }

    return newarr;
}

现在,使用

getText("1618148163#@#JASSER-PC#-#1125015374#@#anas kayyat#-#1543243035#@#anas kayyat#-#");

返回您想要的内容。