Hola, estoy tratando de obtener las palabras justo antes de O . Entonces, dada la cadena:

twitter OR facebook AND NOT (hello OR p )

Me gustaría obtener: twitter y hello.

Abajo está mi código. Lo que he intentado hasta ahora es obtener la cadena twitter pero obtengo "O facebook AND NOT (hola" en lugar de solo hello:

var string2 = "twitter OR facebook AND NOT (hello OR p )"

var result = string2.match(/(.+?)(?=OR)/g)

console.log(result)
1
jakestreamhat 31 oct. 2017 a las 14:58

3 respuestas

La mejor respuesta

Usted puede hacer:

var string2 = 'twitter OR facebook AND NOT (hello OR p )',
    result = string2.match(/\w+(?=\s+OR)/g);

console.log(result)
1
Yosvel Quintero Arguelles 31 oct. 2017 a las 12:09

Un problema inmediato es que al usar (.+?) estás seleccionando cada personaje que viene antes de OR. Esto incluirá espacios y paréntesis. Esencialmente, todo después del primer OR y antes del segundo OR está seleccionado.

Puede cambiar eso a \w+? para seleccionar solo caracteres de palabras.

El segundo problema es que debe hacerlo, como mínimo, buscar espacios antes de su palabra clave OR, pero también puede verificar espacios después para que no coincida con palabras como OREGAN o BORING.

var string1 = "twitter OR facebook AND NOT (hello OR p )"
var string2 = "twitter   OR   facebook AND NOT (hello   OR   p )"
var string3 = "twitter OR facebook AND NOT (hello OREGAN p )"

var expr = /(\w+?)(?=\s+OR\s+)/g

var result1 = string1.match(expr)
var result2 = string2.match(expr)
var result3 = string3.match(expr)

console.log(result1, result2, result3)
0
Khauri 31 oct. 2017 a las 12:18

Una respuesta perezosa (porque las palabras que necesita son minúsculas):

var a = "twitter OR facebook AND NOT (hello OR p )";
arr = a.match(/[a-z]{2,20}/g); 
console.log(arr);
0
PhilMaGeo 31 oct. 2017 a las 12:24