JavaScript:使用正则表达式在其他字符之间提取字符
考虑一下这个字符串JavaScript:使用正则表达式在其他字符之间提取字符,javascript,jquery,regex,string,Javascript,Jquery,Regex,String,考虑一下这个字符串 var string = "sometext/#a=some_text/#b=25/moretext"; 我想做的是提取“a”和“b”的值(“一些文本”和25) 因此,基本上我想做的是找到“#a=“并在下面的/之前抓取所有内容,然后对b执行同样的操作。有人能告诉我如何实现这一点吗?此外,我是否会使用相同的表达式来更改字符串中的值 我曾经用PHP做过这件事,但现在我无法用JavaScript来理解它。如果有人能帮我一把,我将不胜感激,谢谢。多谢各位 编辑:这里是抽取的PHP版
var string = "sometext/#a=some_text/#b=25/moretext";
我想做的是提取“a”和“b”的值(“一些文本”和25)
因此,基本上我想做的是找到“#a=“
并在下面的/
之前抓取所有内容,然后对b执行同样的操作。有人能告诉我如何实现这一点吗?此外,我是否会使用相同的表达式来更改字符串中的值 我曾经用PHP做过这件事,但现在我无法用JavaScript来理解它。如果有人能帮我一把,我将不胜感激,谢谢。多谢各位 编辑:这里是抽取的PHP版本
$string = "sometext/#a=some_text/#b=25/moretext";
$expr = '@#([a-z]+)=(.+?)/@';
$count = preg_match_all($expr, $string, $matches);
$result = array();
for ($i = 0; $i < $count; $i++) {
$result[$matches[1][$i]] = $matches[2][$i];
}
print_r($result[b]);
$string=“sometext/#a=someu text/#b=25/moretext”;
$expr='@#([a-z]+)=(.+?)/';
$count=preg\u match\u all($expr,$string,$matches);
$result=array();
对于($i=0;$i<$count;$i++){
$result[$matches[1][$i]]=$matches[2][$i];
}
打印($result[b]);
(输出将是“一些文本”)
更改字符串的值
var string = "sometext/#a=some_text/#b=25/moretext";
Regex.Replace(string,"(#a=).(/)",,"$1New Text$2");
基于有限的信息(您没有指定在
#
和=
之间可以显示哪些字符),以下是我认为您需要的:
var string = "sometext/#a=some_text/#b=25/moretext",
regex = /#([^=]+)=([^\/]+)/g,
matches = [],
match;
while (match = regex.exec(string)) {
matches.push(match[2]);
}
// matches -> ["some_text", "25"]
如果要更改字符串中的值,可以使用与以前相同的正则表达式:
string = string.replace(regex, "#$1=new_value");
// -> "sometext/#a=new_value/#b=new_value/moretext"
如果希望提取所有值并将其作为名称/值对存储在字典中,则可以使用以下方法:
var regexp = /#(.*?)=(.*?)\//g;
var string = "sometext/#a=some_text/#b=25/moretext";
var match;
var result = {};
while ((match = regexp.exec(string)) != null) {
result[match[1]] = match[2];
}
alert(JSON.stringify(result));
你用PHP做了什么?也许我们可以向您展示如何在JS.k编辑的文章中使用相同的方法,谢谢谢谢谢谢,这很有帮助,但不是我想要的,因为字符串可以在任何给定点更改,我需要能够根据变量名获取它。如果从字符串中删除了“a”,我需要一种方法来尝试调用“a”以查看它是否存在。否则x[1]将拉动“b”,x[2]将不存在。如果我错了,请纠正我。@lan,给我举个字符串的例子。我认为is应该使用这种格式的任何sting。只需播放演示,看看它是否适用于所有您可以获得的字符串。我认为应该。
var regexp = /#(.*?)=(.*?)\//g;
var string = "sometext/#a=some_text/#b=25/moretext";
var match;
var result = {};
while ((match = regexp.exec(string)) != null) {
result[match[1]] = match[2];
}
alert(JSON.stringify(result));