2011-10-21 29 views
5

Tôi muốn lưu chuỗi con vào biến javascript bằng regex trừ khi có cách khác/dễ dàng hơn. Ví dụ tôi có một liên kết như thế này: http://www.youtube.com/watch?v=sEHN4t29oXY&feature=relatedLàm thế nào để chọn một chuỗi con sau khi ký tự cho trước

Tôi muốn chỉ nhận sEHN4t29oXY & feature = liên quan vì vậy tôi đoán tôi sẽ phải kiểm tra xem có dấu bằng đầu tiên xuất hiện và sau đó lưu các phần còn lại của chuỗi vào biến .. xin vui lòng giúp đỡ, nhờ

+0

là mục đích để nhận các tham số url đơn giản? – zzzzBov

Trả lời

3

không phải với regex, nhưng đơn giản quá, bởi vì phần url đầu tiên là tĩnh và có 23 ký tự chiều dài

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

Ồ, tôi đã thực hiện một sai lầm, ông muốn một phần khác, vì vậy thực tế mã sẽ trông giống như:

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

Trong thực tế, thậm chí còn hiệu quả hơn giải pháp của tôi. Chỉ cần yêu cầu khớp định dạng chính xác cho URL gốc. –

10

hiệu quả:

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

thường xuyên biểu hiện:

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

cảm ơn bạn đã trả lời –

+0

Nếu câu trả lời này đã giúp bạn, vui lòng đánh dấu là đã được chấp nhận. –

4

Giống như vậy:

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

chỉ cần chắc chắn để kiểm tra cho null sau đó, trong trường hợp không có trận đấu ... –

+0

Nếu không có trận đấu. Nó sẽ ném một lỗi. –

0

tôi nghĩ rằng cách dễ nhất để nhận một tham số ra khỏi một chuỗi truy vấn là sử dụng đoạn mã sau:

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

Bây giờ, ai đó nên được la hét tôi với một lời nhận xét như:

Không có đối tượng URI trong JavaScript, bạn không thể làm điều đó !!! 11one

Và rằng ai đó sẽ là đúng, vì vậy ở đây bạn đi:

/** 
* 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)); 
Các vấn đề liên quan