2011-02-09 2 views
0

Мой текстКак извлечь текст с помощью регулярного выражения?

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

Результат должен быть:

JASSER-PC 
anas kayyat 
anas kayyat 

Я использую:

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

Но это дает мне, что:

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

Осмотрите утверждения '(? <...)' и положительный look-ahead '(? = ...)' не поддерживаются в регулярных выражениях Javascript. –

+0

@Linus: половина права - вперед-вперед поддерживается, смотреть-сзади нет. –

+0

@Linus Kleen: Поддерживаются утверждения с подтверждением ожидания. – Gumbo

ответ

4

регулярные выражения JavaScript не поддерживают взгляд-за утверждения (т.е. (?<=…) и (?<!…)), так что вы не можете использовать это регулярное выражение. Но вы можете использовать это:

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

Затем просто возьмите согласованную строку первой группы. Кроме того, чтобы соответствовать только как можно меньше, сделайте квантор + неживым, используя +?.

0

JavaScript не зирр ort lookbehinds. Сделать квантор не жадный, и использование:

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

Группа (.+) будет соответствовать как можно больше (это «жадный»). Чтобы найти минимальное совпадение, вы можете использовать (.+?).

0

Я дам вам без регулярных выражений ответа, так как с помощью регулярных выражений не всегда уместен, будь то скорость или readibility самого регулярного выражения:

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

возвращает то, что вы хотели.

Смежные вопросы