Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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_Jquery_Regex_String - Fatal编程技术网

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));