# Extraer cadena entre dos palabras -vJavaScript-

**URL:** <https://foros.velneo.com/t/extraer-cadena-entre-dos-palabras-vjavascript/7805>\
**Category:** Velneo\
**Created:** [17 Febrero, 2015 23:21 UTC](https://foros.velneo.com/t/extraer-cadena-entre-dos-palabras-vjavascript/7805 "2015-02-17T23:21:33Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![velavisual1](https://avatars.discourse-cdn.com/v4/letter/v/dbc845/32.png) [@velavisual1](https://foros.velneo.com/u/velavisual1)\
**Post date:** [17 Febrero, 2015 23:21 UTC](https://foros.velneo.com/t/extraer-cadena-entre-dos-palabras-vjavascript/7805/1 "2015-02-17T23:21:33Z")

</div>

@ALL

Hola,

Me he visto en la necesidad de realizar una función que me extraiga la cadena resultante entre dos palabras.

He buscado la función en javascript por internet y la he adaptado para su uso en Velneo - vJavaScript.

La comparto con ustedes por si a alguien le es útil.

[url fuente del código javascript](http://javascript.espaciolatino.com/ejemplos/ejemplo07.htm)

Os adjunto el .VIN correspondiente y una imagen.

Espero que no tengáis problema con su uso.

Un saludo,

[ExtraerCadena.rar](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/4/496f1cf121cfc70f9596816508751a9d6d37f0a2.rar) (1.44 KB)

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/0/0100d1ed995b2f0af36facb1d1c42d7a1b99021e.png)

---

<div class="post-metadata">

**Author:** ![juanjo1](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/juanjo1/32/5114_2.png) [@juanjo1](https://foros.velneo.com/u/juanjo1)\
**Post date:** [17 Febrero, 2015 23:38 UTC](https://foros.velneo.com/t/extraer-cadena-entre-dos-palabras-vjavascript/7805/2 "2015-02-17T23:38:01Z")

</div>

Se agradece el aporte.

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [18 Febrero, 2015 09:45 UTC](https://foros.velneo.com/t/extraer-cadena-entre-dos-palabras-vjavascript/7805/3 "2015-02-18T09:45:25Z")

</div>

Muchas gracias.

---

<div class="post-metadata">

**Author:** ![percyleoncio1](https://avatars.discourse-cdn.com/v4/letter/p/a587f6/32.png) [@percyleoncio1](https://foros.velneo.com/u/percyleoncio1)\
**Post date:** [18 Febrero, 2015 14:39 UTC](https://foros.velneo.com/t/extraer-cadena-entre-dos-palabras-vjavascript/7805/4 "2015-02-18T14:39:07Z")

</div>

Muy agradecido por el aporte

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [19 Febrero, 2015 13:07 UTC](https://foros.velneo.com/t/extraer-cadena-entre-dos-palabras-vjavascript/7805/5 "2015-02-19T13:07:50Z")

</div>

Hola Antonio.

Tu excelente aporte me ha venido bien para repasar los recursos que tiene Velneo para el parseo de cadenas de texto, tal como los XML, HTML y demás textos estructurados.

He visto que Velneo no contempla algunas funciones importantes para estos menesteres y recordando mi experiencia con otros lenguajes he completado tu aportación con 3 nuevas funciones de JavaScript.

- La primera función es **cadenaOcurrencias(cCadena, cBuscar, lCaseInsensitive)** que nos dirá el número de veces que una cadena se repite dentro de otra.
- La segunda es **cadenaPosicion(cCadena, cBuscar, nInicio, nOcurrencia)** que nos devuelve la posición de la n-ocurrencia de una cadena dentro de otra a partir de una determinada posición.
- La tercera es **cadenaExtraer(cCadena, cIniLim, cFinLim, nOcurrencia, lCaseInsensitive)** que nos devuelve la subcadena entre dos delimitadores dentro de una cadena principal.

Aquí va el código.

```auto

/ *****************************************************************
// Función cadenaExtraer(cCadena, cIniLim, cFinLim, nOcurrencia, lCaseInsensitive) - 
//	Extrae un String entre 2 delimitadores
// cCadena - cadena a analizar
// cIniLim - límite inicial
// cFinLim - límite final
// nOcurrencia - nº de ocurrencia
// lCaseInsensitive - es true para no sensible a mayúsculas
function cadenaExtraer(cCadena, cIniLim, cFinLim, nOcurrencia, lCaseInsensitive){
	// Busca la primera ocurrencia en caso de no pasar un valor positivo de nOcurrencia
    if (!nOcurrencia) nOcurrencia = 1;
    var nPos1, nPos2;
    if (lCaseInsensitive) {
		var cCadenab = cCadena.toLowerCase();
		cIniLim = cIniLim.toLowerCase();
		cFinLim = cFinLim.toLowerCase();
	}
    nPos1 = cadenaPosicion(cCadenab, cIniLim, 0, nOcurrencia)
	if (nPos1 > -1){
		nPos1 += cIniLim.length;
		nPos2 = cadenaPosicion(cCadenab, cFinLim, nPos1, 1);
	}
    if(nPos1 > -1 && nPos2 > -1) {
        return cCadena.substring(nPos1, nPos2);
    } else {
        return "";
    }
}

// *****************************************************************
// Función CadenaOcurrencias(cCadena, cBuscar, lCaseInsensitive) - 
//	Devuelve el Nº de ocurrencias de cBuscar en cCadena
// cCadena - cadena a analizar
// cBuscar - cadena a buscar
// lCaseInsensitive - es true para no sensible a mayúsculas
function CadenaOcurrencias(cCadena, cBuscar, lCaseInsensitive) {
	// Contador de ocurrencias 
	if (cBuscar.length = 0) return 0;
    if (lCaseInsensitive) {
		cCadena = cCadena.toLowerCase();
		cBuscar = cBuscar.toLowerCase();
	}
	var contador = 0, inicio = 0, longitud = cBuscar.length;
	while((inicio = cCadena.indexOf(cBuscar, inicio)) > -1) {
		contador++;
		inicio += longitud;
	}
	return contador.toFixed(0);
}

// *****************************************************************
// Función cadenaPosicion(cCadena, cBuscar, nInicio, nOcurrencia) - 
//	Devuelve la posición de la N-Ocurrencia de cBuscar en cCadena a partir de una posición inicial
// cCadena - cadena a analizar
// cBuscar - cadena a buscar
// nInicio - inicio de la búsqueda (0 es el inicio)
// nOcurrencia - nº de ocurrencia
function cadenaPosicion(cCadena, cBuscar, nInicio, nOcurrencia) {
	// Contador de ocurrencias 
	var contador = 0, inicio = nInicio, longitud = cBuscar.length;
	var result = "";
	while((inicio = cCadena.indexOf(cBuscar, inicio)) > -1) {
		contador++;
		if (contador==nOcurrencia){
			return inicio;
		}
		inicio += longitud;
	}
	return -1;
}

```

En el adjunto se ve un ejemplo de uso.  
Espero que os sea de ayuda.

Saludos  
Paco Satué

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/6/6c798043656718553de71333f4dd5ca73a05ebc3.png)

---

<div class="post-metadata">

**Author:** ![velavisual1](https://avatars.discourse-cdn.com/v4/letter/v/dbc845/32.png) [@velavisual1](https://foros.velneo.com/u/velavisual1)\
**Post date:** [19 Febrero, 2015 13:23 UTC](https://foros.velneo.com/t/extraer-cadena-entre-dos-palabras-vjavascript/7805/6 "2015-02-19T13:23:08Z")

</div>

@seh

Gracias Paco

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [19 Febrero, 2015 18:02 UTC](https://foros.velneo.com/t/extraer-cadena-entre-dos-palabras-vjavascript/7805/7 "2015-02-19T18:02:29Z")

</div>

Hola.

He corregido el código para evitar bucles infinitos y dejar un solo return y lo he formateado un poco.

```auto

// *****************************************************************
// Función cadenaExtraer(cCadena, cIniLim, cFinLim, nOcurrencia, lCaseInsensitive) - 
//	Extrae un String entre 2 delimitadores
// cCadena - cadena a analizar
// cIniLim - límite inicial
// cFinLim - límite final
// nOcurrencia - nº de ocurrencia
// lCaseInsensitive - es true para no sensible a mayúsculas
function cadenaExtraer(cCadena, cIniLim, cFinLim, nOcurrencia, lCaseInsensitive) {
	// Busca la primera ocurrencia en caso de no pasar un valor positivo de nOcurrencia
	if (!nOcurrencia) nOcurrencia = 1;
	var nPos1, nPos2, subcadena = "";
	if (lCaseInsensitive) {
		var cCadenab = cCadena.toLowerCase();
		cIniLim = cIniLim.toLowerCase();
		cFinLim = cFinLim.toLowerCase();
	}
	nPos1 = cadenaPosicion(cCadenab, cIniLim, 0, nOcurrencia);
	if (nPos1 > -1) {
		nPos1 += cIniLim.length;
		nPos2 = cadenaPosicion(cCadenab, cFinLim, nPos1, 1);
	}
	if (nPos1 > -1 && nPos2 > -1) {
		subcadena = cCadena.substring(nPos1, nPos2);
	}
	return subcadena
}

// *****************************************************************
// Función CadenaOcurrencias(cCadena, cBuscar, lCaseInsensitive) - 
//	Devuelve el Nº de ocurrencias de cBuscar en cCadena
// cCadena - cadena a analizar
// cBuscar - cadena a buscar
// lCaseInsensitive - es true para no sensible a mayúsculas
function CadenaOcurrencias(cCadena, cBuscar, lCaseInsensitive) {
	// Contador de ocurrencias 
	var contador = 0,
		inicio = 0,
		longitud = cBuscar.length;
	if (longitud && cCadena.length) {
		if (lCaseInsensitive) {
			cCadena = cCadena.toLowerCase();
			cBuscar = cBuscar.toLowerCase();
		}
		while ((inicio = cCadena.indexOf(cBuscar, inicio)) > -1) {
			contador++;
			inicio += longitud;
		}
	}
	return contador.toFixed(0);
}

// *****************************************************************
// Función cadenaPosicion(cCadena, cBuscar, nInicio, nOcurrencia) - 
//	Devuelve la posición de la N-Ocurrencia de cBuscar en cCadena a partir de una posición
// cCadena - cadena a analizar
// cBuscar - cadena a buscar
// nInicio - inicio de la búsqueda (0 es el inicio)
// nOcurrencia - nº de ocurrencia
function cadenaPosicion(cCadena, cBuscar, nInicio, nOcurrencia) {
	// Contador de ocurrencias 
	var contador = 0,
		posicion = -1,
		longitud = cBuscar.length;
	if (longitud && cCadena.length) {
		posicion = nInicio
		while ((posicion = cCadena.indexOf(cBuscar, posicion)) > -1) {
			contador++;
			if (contador == nOcurrencia) {
				break;
			}
			posicion += longitud;
		}
	}
	return posicion;
}

```

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![percyleoncio1](https://avatars.discourse-cdn.com/v4/letter/p/a587f6/32.png) [@percyleoncio1](https://foros.velneo.com/u/percyleoncio1)\
**Post date:** [19 Febrero, 2015 20:58 UTC](https://foros.velneo.com/t/extraer-cadena-entre-dos-palabras-vjavascript/7805/8 "2015-02-19T20:58:21Z")

</div>

Excelente aportación amigo Paco
