2

考虑这个字符串,

var string = "sometext/#a=some_text/#b=25/moretext";

我想做的是提取“a”和“b”的值(“some_text”和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]);

(输出将是“some_text”)

4

4 回答 4

3
var x = "sometext/#a=some_text/#b=25/moretext".match(/#a=(.+)\/.*#b=(.*).*\//)
var matches = [x[1], x[2]];

现场演示

于 2012-06-01T07:16:29.557 回答
2

如果您希望提取所有值并将它们作为名称/值对存储在字典中,您可以使用以下命令:

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));
于 2012-06-01T07:28:00.313 回答
1

根据有限的信息(您没有指定#和之间可以出现哪些字符=),这就是我认为您正在寻找的内容:

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"
于 2012-06-01T07:26:14.800 回答
0

更改字符串的值

var string = "sometext/#a=some_text/#b=25/moretext"; 

Regex.Replace(string,"(#a=).(/)",,"$1New Text$2");
于 2012-06-01T07:23:34.537 回答