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 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>