Necesito reemplazar menos o más que ( < > ) caracteres, pero mantengo las etiquetas html (las etiquetas simples funcionarán como <b>text</b> sin argumentos). Así que la entrada a continuación:
<b>> 0.5 < 0.4</b> - <>Debiera ser:
<b>> 0.5 < 0.4</b> - <>Todo lo que logré encontrar y editar ahora es esta expresión:
<\/?[az][a-z0-9]*[^>\s]*>|([<>]) Agrupa los caracteres < y > pero también coincide con las etiquetas que no necesito reemplazar
UPD: Gracias a @Sree Kumar , aquí están las funciones finales:
String.prototype.replaceAt = function (index, char) { let arr = this.split(''); arr[index] = char; return arr.join(''); }; String.prototype.escape = function () { let p = /(?:<[a-zA-Z]+>)|(?:<\/[a-zA-Z]+>)|(?<lt><)|(?<gt>>)/g, result = this, match = p.exec(result); while (match !== null) { if (match.groups.lt !== undefined) { result = result.replaceAt(match.index, '<'); } else if (match.groups.gt !== undefined) { result = result.replaceAt(match.index, '>'); } match = p.exec(result); } return result; };Pruebe esta expresión regular:
<(?!\/?\w+>)|(?<!<\w+|<\/\w+)>Explicación
<(?!\/?\w+>) encuentra todos los símbolos '<' (excepto en las etiquetas)(?<!<\w+|<\/\w+)> encuentra todos los símbolos '>' (excepto en las etiquetas)Puedes usarlos por separado:
let str = '<b>> 0.5 < 0.4</b> - <>'; let lessThen = /<(?!\/?\w+>)/g; let greaterThen = /(?<!<\w+|<\/\w+)>/g; str = str.replace(lessThen, '<'); str = str.replace(greaterThen, '>'); console.log(str); // <b>> 0.5 < 0.4</b> - <> ¡NÓTESE BIEN! Solo encuentra los símbolos '<' y '>' entre etiquetas. No verifica que html sea válido. Para texto como ese <a></b> no encontrará ninguna coincidencia.
Aquí hay una manera de hacerlo usando grupos con nombre. Es decir, nombre su grupo deseado y búsquelo. Puede ser null o undefined a veces porque no coincidía. Por lo tanto, tendrá que agregar el cheque nulo.
Observe (?<B>...) que rodea al grupo "deseado". Además, observe el cheque nulo en la quinta línea.
let p = /(?:<[a-zA-Z]+>)|(?:<\/[a-zA-Z]+>)|(?<B>[<>])/g let input = '<b>> 0.5 < 0.4</b> - <>'; let match = p.exec( input ); while( match !== null) { if( match.groups.B !== undefined ) console.log( match.groups.B ); match = p.exec( input ) }