Estoy usando javascript.
tengo una cadena:
let x = ".175\" x 2.5\" x 144\""; // .175" x 2.5" x 144"Me gustaría manipular la cadena para devolver 3 variables separadas
var thickness = 0.175 var width = 2.5 var length = 144Necesito cambiar el grosor de la cuerda de .175 a 0.175, aquí está mi intento:
let x = ".175\" x 2.5\" x 144\""; let regex = / /g; let regex2 = /\./i; let regex3 = /\"/g; //Do the regex function const regexFun = () => { try { console.log(x); if (x.charAt(0) == "."){ const fun1 = x.replace(regex2, '0.'); console.log(fun1); } else{ const fun1 = x.replace(regex3, ''); console.log(fun1); } } catch (err) { console.log(err.message) } }En el ejemplo que di, puedo eliminar las comillas usando " pero parece que no funciona con . ¿Cómo puedo hacer esto? ¡Gracias!
Puede hacer coincidir el formato de la cadena con grupos de captura con nombre.
^(?<thickness>\d*\.?\d+)"\s+x\s+(?<width>\d*\.?\d+)"\s+x\s+(?<length>\d*\.?\d+)"$El patrón coincide:
^ Comienzo de cadena(?<thickness>\d*\.?\d+) Grosor del grupo coincide con dígitos opcionales, punto opcional y 1+ dígitos"\s+x\s+ Coincidencia " y un carácter x entre caracteres de espacio en blanco opcionales(?<width>\d*\.?\d+) Ancho de grupo con el mismo patrón de dígitos"\s+x\s+ Coincide con el carácter " y x(?<length>\d*\.?\d+) Longitud de grupo con el mismo patrón de dígitos" literalmente$ Fin de la cadenaVea los valores de grupo en una demostración de regex101 .
let x = ".175\" x 2.5\" x 144\""; const regex = /^(?<thickness>\d*\.?\d+)"\s+x\s+(?<width>\d*\.?\d+)"\s+x\s+(?<length>\d*\.?\d+)"$/; const m = x.match(regex); if (m) { const thickness = parseFloat(m.groups.thickness); const width = parseFloat(m.groups.width); const length = parseFloat(m.groups.length); console.log(thickness, width, length); }Usa esta expresión regular
(^|\D)(\.\d+)
( // Begin capture ^ // Beginning of line | // Or \D // Any non-digit ) // End capture ( // Begin capture \. // Decimal point \d+ // Number ) // End capture Reemplazar con $10$2
$1 // Contents of the 1st capture 0 // Literal 0 $2 // Contents of the 2nd capture let x = ".175\" x 2.5\" x 144\""; console.log(x.replace(/(^|\D)(\.\d+)/g, "$10$2"));Como comentó Felix, la mejor manera puede ser extraer sus números usando expresiones regulares primero y luego analizarlos como flotantes:
var x = ".175\" x 2.5\" x 144\""; // .175" x 2.5" x 144" let numbers = x.match(/(\d*\.)?\d+/g).map(n => parseFloat(n)) var thickness = numbers[0] var width = numbers[1] var length = numbers[2] console.log('thickness: ' + thickness) console.log('width: ' + width) console.log('length: ' + length)