2016-07-28 4 views
2

Я получил некоторую информацию, представленную в футбол цель, как это:JavaScript Regex - пытается соответствовать все номера в (5' , 78' , 80 ') (90' + 2') не предшествуют +

(5' , 78' , 80 ') (90' + 2')

Я хотел бы использовать JavaScript, чтобы соответствовать все номера не предшествует + знак (2 в данном случае). Я не знаю, как это сделать без негативных взглядов.

Я попытался это:

"(5', 78', 80')(90'+2')".match(/[^+]\d+'/g) 

, но я получаю круглые скобки, пробелы, и ' в моих возвращенных матчей:

["(5'", " 78'", " 80'", "(90'"] 

Я ищу результат как. Обратите внимание, что не имеет номер 2 в нем, потому что 2 предшествует с +

["5", "78", "80", "90"] 

Все указатели ценится.

+2

Первая мысль: убрать цифры предшествуют +, то вы можете сопоставить все числа. –

+0

Почему я не подумал об этом? Это, безусловно, самое простое решение! Благодарю. – jrahhali

+0

Вам нужно одно регулярное выражение, или вы можете работать с битами JS для предварительной и постфильтрации? –

ответ

4

Вы можете использовать захваченное группу для значения вы хотите в результате:

var regexp = /(?:\+\d+|(\d+))'/g; 
var str = "(5', 78', 80')(90'+2')"; 
var m; 
var result = []; 

while ((m = regexp.exec(str))) { 
    if (m[1] !== undefined) 
     result.push(m[1]); 
} 
console.log(result); 
//=> ["5", "78", "80", "90"] 
+1

Умный! Использование группы захвата внутри группы без захвата. Узнал что-то новое сегодня :) – jrahhali

0

вы могли бы использовать этот шаблон

(?:[^+]|^)(\d+(\.\d+)?) 

Demo

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