获取url中"?"符后的字串

本文介绍了一种通过解析URL中的参数来动态设置HTML5视频元素的播放源的方法。该方法适用于需要根据不同场景加载不同视频文件的网站应用。

 <video id="videoId" class="videoControl" src="" controls="controls" autoplay="autoplay">    </video>   

var url = location.search; //获取url中"?"符后的字串 ('?modFlag=business&role=1')

    var theRequest = new Object();
    if (url.indexOf("?") != -1) {
        var str = url.substr(1); //substr()方法返回从参数值开始到结束的字符串;
        var strs = str.split("&");
        for (var i = 0; i < strs.length; i++) {
            theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
        }
        console.log(theRequest.currentSrc); //此时的theRequest就是我们需要的参数;
        $('#videoId').attr('src', theRequest.currentSrc);
    }
<think>嗯,用户想在Linux shell中从数组里提取并输出特定元素的子字符串。首先,我需要回忆一下Shell中处理数组和字符串的方法。记得Shell数组可以通过下标访问,比如${array[index]}。而字符串截取的话,可以用${var:start:length}这种语法。 那用户的问题具体是如何操作呢?比如说,有一个数组,每个元素都是字符串,他们想对每个元素截取一部分然后输出。可能需要遍历数组,然后对每个元素进行处理。比如数组元素是"abcdef",想要截取前三个字符,变成"abc"。 首先,我需要确认如何声明数组。在Shell中,数组可以用括号括起来,元素之间用空格分隔,比如array=("apple" "banana" "cherry")。然后,如何遍历数组呢?可以用for循环,比如for element in "${array[@]}",这样逐个处理每个元素。 接下来是截取子串。Shell中的字符串截取语法是${变量:起始位置:长度}。起始位置如果是0,就是从开头开始,长度是需要的字符数。比如${element:0:3}会取前三个字符。如果用户需要不同的起始位置或长度,需要调整这两个参数。 另外,用户可能需要处理数组中的特定元素,比如第三个元素或者最后一个元素。这时候可以用下标访问,比如${array[2]}是第三个元素,${array[-1]}是最后一个元素。然后对单个元素进行子串截取。 例如,假设数组是files=("file1.txt" "document.pdf" "image.jpg"),用户想提取每个元素的前四个字符,可以用${file:0:4},得到"file", "docu", "imag"。 还有一个情况是,用户可能需要根据特定条件截取,比如从某个字符开始到结束,或者删除前缀后缀。比如,使用${var#pattern}删除最短匹配的前缀,或者${var##pattern}删除最长匹配的前缀。或者使用${var%pattern}处理后缀。不过用户的问题更可能是直接截取子串,而不是模式匹配。 那如何把这些步骤整合起来呢?首先定义数组,然后遍历每个元素,对每个元素应用子串截取,然后输出。例如: ```bash array=("apple" "banana" "cherry") for element in "${array[@]}"; do echo "${element:0:3}" done ``` 这样会输出"app", "ban", "che"。 用户还可能想处理数组中的特定元素,比如第二个元素的前五个字符。可以这样写: ```bash echo "${array[1]:0:5}" # 输出"banan" ``` 另外,如果数组元素是使用空格或其他分隔符组成的字符串,用户可能需要分割字符串后再截取,但问题中用户提到的是直接提取子串,所以可能不需要分割。 还要注意Shell数组的下标是从0开始的,所以在处理特定元素时要注意索引是否正确。比如,第三个元素的索引是2。 总结步骤应该是:访问数组元素,应用子串截取语法,然后输出。如果有多个元素需要处理,使用循环遍历数组。如果只需要单个元素,直接访问即可。 可能还需要考虑数组是否为空的情况,避免出错。可以使用${array[@]}来展开所有元素,即使数组为空也不会报错。或者先检查数组长度,使用${#array[@]}来判断。 最后,给出示例代码,让用户可以根据自己的需求调整起始位置和长度参数,或者使用模式匹配来删除前后缀。同时提醒用户注意Shell的字符串操作语法中的起始位置和长度的用法,比如起始位置从0开始,长度是可选的,如果省略则截取到末尾。</think>在Linux shell中,打印数组元素的部分字符串可以通过以下步骤实现: ### 一、基础操作步骤 1. **定义数组** 使用标准数组声明语法: ```bash arr=("www.tarena.com" "mail.cloud.com" "ftp.kernel.org") ``` 2. **访问单个元素** 通过下标索引获取特定元素: ```bash echo ${arr[0]} # 输出:www.tarena.com ``` 3. **截取子字符串** 使用`${变量:起始位置:长度}`语法: ```bash echo ${arr[0]:4:6} # 输出:tarena(从第4字符开始截取6个字符) ``` ### 二、完整示例 ```bash #!/bin/bash # 定义包含URL的数组 sites=("www.tarena.com" "mail.cloud.com" "ftp.kernel.org") # 遍历数组并提取子串 for site in "${sites[@]}"; do domain=${site:4:6} # 截取第4位开始的6个字符 echo "子串:$domain" done ``` **输出结果**: ``` 子串:tarena 子串:cloud 子串:kernel ``` ### 三、进阶用法 1. **模式匹配截取** 使用`#`或`##`删除左侧匹配部分: ```bash echo ${arr[0]#www.} # 输出:tarena.com(删除左侧"www.")[^3] echo ${arr[1]##*.} # 输出:com(删除最后一个点左侧所有内容) ``` 2. **获取末尾子串** 使用负数索引(需bash 4.2+): ```bash echo ${arr[2]: -5} # 输出:.org(从倒数第5位开始截取到末尾) ``` 3. **结合循环处理多个元素** 通过`${数组名[@]}`遍历所有元素: ```bash for item in "${arr[@]}"; do echo "${item:0:3}" # 输出每个元素的前3个字符 done ``` ### 四、注意事项 - 数组下标从0开始计数 - 截取长度参数可省略,表示截取到字符串末尾 - 空元素处理建议添加判空逻辑(如`${var:-默认值}`)[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值