Estoy haciendo una secuencia de comandos de selenio. Entonces para eso en la cadena "1 - 8 de 8 elementos". Tengo que encontrar el número antes de la palabra "de" y el número después de la palabra "de", guardarlo en dos variables y verificar si es igual.

Entonces, para eso primero tomé el valor antes de "de" usando la expresión regular "de \ s + \ b (\ w +) \ b" y el valor después de "de" usando la expresión regular "(\ S +) \ s * de". El problema que enfrento es que cuando uso esta expresión regular, el resultado viene con la palabra "de" (8 de, de 8). ¿Qué expresión regular puedo usar para obtener el valor antes y después de "de" (8,8) sin incluir la palabra "de". Esto está usando javascript.

2
Nilenth 9 may. 2016 a las 21:01

5 respuestas

La mejor respuesta

Esta expresión regular le dará el número justo antes de of:

"1 - 7 of 8 items".match(/\d+(?=\s+of\s+)/)
1
Florent B. 9 may. 2016 a las 18:12

No sirve de nada hacerlo por separado, puede dar el resultado incorrecto.

Encuentra ambos al mismo tiempo. (\d+)\s+of\s+(\d+).
Antes está en el grupo de captura 1, después está en el grupo de captura 2.

Haz una búsqueda Si no sabe cómo acceder a los grupos de captura, lea un poco.

0
user557597user557597 9 may. 2016 a las 18:29

Puede dividir la cadena en no dígitos:

var ar = "1 - 8 of 8 items".split(/[^\d]+/)

Que da

Array [ "1", "8", "8", "" ]

Ahora puede comparar el segundo y tercer elemento de la matriz.

ar[1] == ar[2]
0
F. Knorr 9 may. 2016 a las 18:25

No soy experta en regex pero lo intenté.

var findings  = "1 - 8 of 8 items 1 - abc of ghi items".match(/\w+ of \w+/g);
var collection = [];
findings.forEach(function(item){
    var words = item.split(' ');
    collection.push({first: words[0], second: words[2]});
});

console.log(collection);
0
Zohaib Ijaz 9 may. 2016 a las 18:08

'1 - 8 of 8 items'.match(/of\s+\b(\w+)\b/)[1] da la primera 8.

'1 - 8 of 8 items'.match(/(\S+)\s*of/)[1] da el segundo 8.

Alternativa

Las escribiría de la siguiente manera:

'1 - 8 of 8 items'.match(/(\d+) of/)[1] para la primera.

'1 - 8 of 8 items'.match(/of (\d+)/)[1] para la segunda.

0
user125661 9 may. 2016 a las 18:28