Coincidir con las palabras de cadena con caracteres especiales como $ o! y reemplazarlos

Sujit Kumar Singh

Necesidad de procesar en la cadena de entrada de la siguiente manera -

// Input string - 
'My pen cost is !!penCost!! manufactured in $$penYear$$ with colors !!penColor1!! and $$penColor1$$'
// Processed string
'My pen cost is <penCost> manufactured in <penYear> with colors <penColor1> and <penColor1>'

Aunque, he conseguido hacerlo usando bucle, pero interesados ​​en conocer un enfoque expresiones regulares. Este es el estado actual de mi experimento (no en condiciones de trabajo) -

const regex = /\b(\w*([a-zA-Z])|([\!]{2}[a-zA-Z][\!]{2})\w*)\b/g;
// str is holding the input string
str.replace(regex, (match) => {
  return `<${match.substring(2, match.length - 2)}>`;
});

Me quedé atrapado en la expresión regular para que coincida con las palabras correctamente que tienen valor como "$$ [a-zA-Z0-9] $$" o "!! [a-zA-Z0-9] !!".

Mi enfoque es una combinación de coincidencia de palabra y de reemplazo partido .

anubhava:

Puedes utilizar:

str = str.replace(/(!!|\$\$)([\w-]+)\1/g, '<$2>');

RegEx demostración

RegEx detalles:

  • (!!|\$\$)Coincidir !!o $$y la captura en el grupo # 1
  • ([\w-]+) Partido 1+ de palabras o caracteres de guión y captura en el grupo # 2
  • \1: Hacer extremos de cuerda seguro con los mismos delimitadores de partida que en el grupo # 1
  • Reemplazo es <$2>para envolver la cadena en el grupo # 2 en <y>

Código:

const str = 'My pen cost is !!penCost!! manufactured in $$penYear$$ with colors !!penColor1!! and $$penColor1$$';

const res = str.replace(/(!!|\$\$)([\w-]+)\1/g, '<$2>');

console.log(res);
//=> My pen cost is <penCost> manufactured in <penYear> with colors <penColor1> and <penColor1>

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=320325&siteId=1
Recomendado
Clasificación