我对正则表达式非常不满意。我有一个像/this%20is%20part%20one/and%20part%20two
这样的网址,我需要:
1)将所有%20
替换为空格,使其成为正常的字符串
2)将每个部分存储在自己的变量
中最后,var1应该有this is part one
而var2应该有and part two
我为你拍了一张照片:
答案 0 :(得分:3)
使用Javascript
var re =/%20/g;
var testString = '/this%20is%20part%20one/and%20part%20two';
var splitString= testString.replace(re,' ').split('/')
var var1= splitString[1];
var var2= splitString[2];
console.log('var1:',capitalizeFirstLetters(var1));
console.log('var2:',capitalizeFirstLetters(var2));
function capitalizeFirstLetters(str){
return str.toLowerCase().replace(/^\w|\s\w/g, function (letter) {
return letter.toUpperCase();
})
}

答案 1 :(得分:1)
使用sed
即可:
url="/this%20is%20part%20one/and%20part%20two"
var1=$(sed 's/%20/ /g' <<< $url | cut -d'/' -f2)
var2=$(sed 's/%20/ /g' <<< $url | cut -d'/' -f3)
输出:
>echo $va1
this is part one
>echo $var2
and part two
答案 2 :(得分:0)
你真的需要一个正则表达式吗?好像用锤子打飞。你应该能够:
.replace()
至%20
执行全局' '
。/
作为分隔符将该字符串分解。例如:
let url = '/this%20is%20part%20one/and%20part%20two';
url = url.replace( /%20/g, ' ', url ); //url = "/this is part one/and part two"
url = url.split('/'); //url = ["", "this is part one", "and part two"]
这将允许您使用数组索引:url[1]
和url[2]
(url[0]
从捕获的第一个/
开始为空。但是,如果您不想使用索引数组,则适合您的示例:
var1 = var2 = '';
for( i = 0, n = 1; i < url.length; ++i ){
if( url[i].length > 0 ){
window['var' + n++] = url[i];
}
}
console.log(
var1, // "this is part one"
var2 // "and part two"
);