Quiero verificar si las cadenas que tienen una cita (indicadas con comillas "") contienen una coma justo antes de que finalice la cita.

Ver estos ejemplos:

1)

He said "hi," then left.

2)

He said "hi", then left.

3)

He said "hi, ho", then left.

En 1) hay una coma antes de la segunda comilla, así que esto debería ser captado por la expresión regular.

2) no debe ser atrapada.

3) tampoco debería ser atrapada.


Por lo tanto, quiero obtener un resultado positivo solo si la cadena contiene una cita y esa cita tiene una coma dentro justo antes de que termine. No necesito nada excepto el resultado verdadero o falso de esta expresión regular.

Pido disculpas por no tener una expresión regular para presentar; nunca he trabajado con esto y solo lo necesito para una sola regla de filtro para el conjunto de mejoras de reddit: S

Ah, sí, esto debería estar en JavaScript regex (https: // desarrollador .mozilla.org / es-ES / docs / Web / JavaScript / Guide / Regular_Expressions)

1
A. D. 29 oct. 2017 a las 14:06

4 respuestas

La mejor respuesta

Use una mirada positiva hacia adelante como tal

"[^"]+,(?=")

Junto con .test(), vea una demostración en regex101.com .

3
Jan 29 oct. 2017 a las 11:16

No sé qué explicar sobre esto:

let pattern = /"[^"]*,[^"]*"/g;

let strings = [
  'He said "hi," then left.',
  'He said "hi", then left.',
  'He said "hi, ho", then left.',
  '"He" said "hi," then "left."',
];

strings.forEach(str => {
  console.log(str);
  console.log(str.match(pattern));
})
.as-console-wrapper{top:0;max-height:100%!important}
0
Thomas 29 oct. 2017 a las 11:21

Regexp simple hará el trabajo:

/".*?,"/

Pruébelo: https://regex101.com/r/3cl4h5/1

3
dfsq 29 oct. 2017 a las 11:10
String a1 = "He said \"hi,\" then left.";
String a2 = "He said \"hi\", then left.";
String test = ",\"";

If (a2.contains (test)) te dará falso y if (a1.contains (test)) te dará verdadero ...

0
Ognjen Stanojevic 29 oct. 2017 a las 11:12