2011-10-21 15 views
5

Me gustaría guardar una subcadena en una variable de JavaScript usando regex a menos que haya una manera diferente/más fácil. Por ejemplo, tengo un enlace como este: http://www.youtube.com/watch?v=sEHN4t29oXY&feature=relatedCómo elegir una subcadena después de un carácter dado

quiero sólo para obtener sEHN4t29oXY función & = relacionado así que supongo que tendría que comprobar si el primer signo de igual a aparecer y después de que salvar el resto de la cadena de en la variable .. por favor ayuda, gracias

+0

¿El objetivo es simplemente obtener los parámetros de url? – zzzzBov

Respuesta

3
no

con expresiones regulares, pero demasiado simple, ya primera parte URL es estática y tiene 23 símbolos de longitud

'http://www.youtube.com/watch?v=sEHN4t29oXY&feature=related'.substr(23) 

Oh, he cometido un error, quiere otra parte, la voluntad código de modo real se parece a:

'http://www.youtube.com/watch?v=sEHN4t29oXY&feature=related'.substr(31) 
+0

De hecho, incluso más eficiente que mi solución. Solo requiere una coincidencia exacta de formato para la URL original. –

10

eficiente:

variable = variable.substring(variable.indexOf('?v=')+3) // First occurence of ?v= 

expresión regular:

variable = variable.replace(/.*\?v=/, '') // Replace last occurrence of ?v= and any characters before it (except \r or \n) with nothing. ? has special meaning, that is why the \ is required 
variable = variable.replace(/.*?\?v=/, '') // Variation to replace first occurrence. 
+0

gracias por la respuesta –

+0

Si esta respuesta lo ayudó, marque como aceptado. –

4

así:

var match = /\?v=(.+)/.exec(link)[1]; 
+0

simplemente asegúrese de verificar null luego, en caso de que no haya coincidencias ... –

+0

Si no hay coincidencias. Lanzará un error. –

0

creo que la forma más fácil de obtener un parámetro de una cadena de consulta es utilizar el siguiente código:

var u = new URI('http://www.youtube.com/watch?v=sEHN4t29oXY&feature=related'); 
u.getQuery('v') //sEHN4t29oXY 
u.getQuery('feature') //related 

Ahora, alguien debería gritarme con un comentario como:

No hay objeto URI en JavaScript, no se puede hacer eso !!! 11one

Y que alguien estaría bien, así que aquí va:

/** 
* URI.js by zzzzBov 
*/ 
(function (w) { 
    "use strict"; 
    var URI = function (str) { 
    if (!this) { 
     return new URI(str); 
    } 
    if (!str) { 
     str = window.location.toString(); 
    } 
    var parts, uriRegEx, hostParts; 
    //http://labs.apache.org/webarch/uri/rfc/rfc3986.html#regexp 
    uriRegEx = /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/; 
    str = str.toString(); 
    parts = uriRegEx.exec(str); 
    this.protocol = parts[1] || ''; 
    this.host = parts[4] || ''; 
    this.pathname = parts[5] || ''; 
    this.search = parts[6] || ''; 
    this.hash = parts[8] || ''; 
    //logic to break host into hostname:port 
    hostParts = this.host.split(':'); 
    this.hostname = hostParts[0] || ''; 
    this.port = hostParts[1] || ''; 
    }; 
    URI.prototype = { 
    getQuery: function (i) { 
     var o; 
     o = URI.parseQueryString(this.search); 
     return i === undefined ? o : o[i]; 
    }, 
    setQuery: function (val) { 
     var s; 
     s = URI.buildQueryString(val); 
     this.search = s.length ? '?' + s : s; 
    }, 
    toString: function() { 
     return this.protocol + '//' + this.host + this.pathname + this.search + this.hash; 
    } 
    }; 
    URI.parseQueryString = function (str) { 
    var obj, vars, i, l, data, rawKey, rawVal, key, val; 
    obj = {}; 
    if (!str) { 
     return obj; 
    } 
    //make sure it's a string 
    str = str.toString(); 
    if (!str.length || str === '?') { 
     return obj; 
    } 
    //remove `?` if it is the first char 
    if (str[0] === '?') { 
     str = str.substr(1); 
    } 
    vars = str.split('&'); 
    for (i = 0, l = vars.length; i < l; i += 1) { 
     data = vars[i].split('='); 
     rawKey = data[0]; 
     rawVal = data.length > 1 ? data[1] : ''; 
     //if there's a key, add a value 
     if (rawKey) { 
     key = URI.decode(rawKey); 
     val = URI.decode(rawVal); 
     //check if obj[key] is set 
     if (obj.hasOwnProperty(key)) { 
      if (typeof obj[key] === 'string') { 
      //if it's a string turn it to an array 
      obj[key] = [ obj[key], val ]; 
      } else { 
      //it's an array, push 
      obj[key].push(val); 
      } 
     } else { 
      obj[key] = val; 
     } 
     } 
    } 
    return obj; 
    }; 
    URI.buildQueryString = function (obj) { 
    var arr, key, val, i; 
    function build(key, value) { 
     var eKey, eValue; 
     eKey = URI.encode(key); 
     eValue = URI.encode(value); 
     if (eValue) { 
     arr.push(eKey + '=' + eValue); 
     } else { 
     arr.push(eKey); 
     } 
    } 
    arr = []; 
    for (key in obj) { 
     if (obj.hasOwnProperty(key)) { 
     val = obj[key]; 
     //isArray check 
     if (Object.prototype.toString.call(val) === '[object Array]') { 
      for (i in val) { 
      if (val.hasOwnProperty(i)) { 
       build(key, val[i]); 
      } 
      } 
     } else { 
      build(key, val); 
     } 
     } 
    } 
    return arr.join('&'); 
    }; 
    URI.decode = decodeURIComponent; 
    URI.encode = encodeURIComponent; 
    w.URI = URI; 
}(window)); 
Cuestiones relacionadas