Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在给定字符后选择子字符串_Javascript_Regex - Fatal编程技术网

Javascript 如何在给定字符后选择子字符串

Javascript 如何在给定字符后选择子字符串,javascript,regex,Javascript,Regex,我想使用正则表达式将子字符串保存到javascript变量,除非有其他/更简单的方法。 例如,我有这样一个链接: 我只想得到sEHN4t29oXY&feature=related,因此我想我必须检查第一个等号是否出现,然后将该字符串的其余部分保存到变量中。。请帮助,谢谢高效: variable = variable.substring(variable.indexOf('?v=')+3) // First occurence of ?v= 正则表达式: variable = variable

我想使用正则表达式将子字符串保存到javascript变量,除非有其他/更简单的方法。 例如,我有这样一个链接:

我只想得到sEHN4t29oXY&feature=related,因此我想我必须检查第一个等号是否出现,然后将该字符串的其余部分保存到变量中。。请帮助,谢谢

高效:

variable = variable.substring(variable.indexOf('?v=')+3) // First occurence of ?v=
正则表达式:

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.

不使用正则表达式,但也很简单,因为第一个url部分是静态的,长度为23个符号

'http://www.youtube.com/watch?v=sEHN4t29oXY&feature=related'.substr(23)
哦,我犯了一个错误,他想要另一个部分,所以实际的代码如下所示:

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

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

我认为从查询字符串中获取参数的最简单方法是使用以下代码:

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

现在,应该有人对我大喊大叫,说:

JavaScript中没有URI对象,你不能这么做!!!11一

有人是对的,所以你来:

/**
 * 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));
/**
*由ZZBOV编写的URI.js
*/
(功能(w){
“严格使用”;
var URI=函数(str){
如果(!这个){
返回新的URI(str);
}
如果(!str){
str=window.location.toString();
}
var部件、uriRegEx、主机部件;
//http://labs.apache.org/webarch/uri/rfc/rfc3986.html#regexp
uriRegEx=/^([^:\/?\]+):)(\/\/([^\/?\]*))([^?\]*)(\?([^?\]*)))(\?([^?\]*))((^(.*)))?/;
str=str.toString();
parts=uriRegEx.exec(str);
本协议=第[1]部分;
this.host=零件[4]| |“”;
this.pathname=parts[5]| |“”;
this.search=零件[6]| |“;
this.hash=parts[8]| |“”;
//将主机拆分为主机名的逻辑:端口
hostParts=this.host.split(“:”);
this.hostname=hostParts[0]| |“”;
this.port=hostParts[1]| |“”;
};
URI.prototype={
getQuery:函数(i){
var o;
o=URI.parseQueryString(this.search);
返回i==未定义?o:o[i];
},
setQuery:函数(val){
var s;
s=URI.buildQueryString(val);
this.search=s.length?'?'+s:s;
},
toString:函数(){
返回this.protocol+'/'+this.host+this.pathname+this.search+this.hash;
}
};
URI.parseQueryString=函数(str){
var obj,var,i,l,数据,rawKey,rawVal,key,val;
obj={};
如果(!str){
返回obj;
}
//确保它是一根绳子
str=str.toString();
如果(!str.length | | str=='?'){
返回obj;
}
//如果是第一个字符,请删除“?”
如果(str[0]=='?'){
str=str.substr(1);
}
vars=str.split('&');
对于(i=0,l=vars.length;i1?数据[1]:“”;
//如果有键,请添加一个值
if(rawKey){
key=URI.decode(rawKey);
val=URI.decode(rawVal);
//检查是否设置了obj[键]
if(对象hasOwnProperty(键)){
如果(对象的类型[键]='string'){
//如果是字符串,则将其转换为数组
obj[key]=[obj[key],val];
}否则{
//这是一个数组,推
obj[键]。推送(val);
}
}否则{
obj[key]=val;
}
}
}
返回obj;
};
URI.buildQueryString=函数(obj){
var arr,key,val,i;
功能构建(键、值){
var eKey,eValue;
eKey=URI.encode(键);
eValue=URI.encode(值);
if(eValue){
arr.push(eKey+'='+eValue);
}否则{
arr.push(eKey);
}
}
arr=[];
用于(输入obj){
if(对象hasOwnProperty(键)){
val=obj[key];
//无序检查
if(Object.prototype.toString.call(val)='[Object Array]'){
用于(val中的i){
如果(val.hasOwnProperty(i)){
构建(key,val[i]);
}
}
}否则{
构建(key,val);
}
}
}
返回arr.join('&');
};
URI.decode=decodeURIComponent;
URI.encode=encodeURIComponent;
w、 URI=URI;
}(窗口);

目的是简单地获取url参数吗?事实上,甚至比我的解决方案更有效。只需要与原始URL的格式完全匹配。