0

有没有办法在 JQuery 或 Javascript 中复制这个 PHP 片段...

<?php 
  $A = preg_match_all('#{.*(.*)}#U', $value, $B); //matches all between {} put it into array "B"
  $C = $B[1]; // array[0] = "{content}" --- array[1] = "content"
?>

我一直试图找到类似的东西 4 小时左右无济于事。目标基本上是找到之间的所有内容{}然后将这些信息提取出来以使其有用。

我不是 Javascript 专家,所以我将不胜感激。先感谢您。

4

6 回答 6

5

您可以使用以下命令将 { 和 } 之间的所有文本块放入一个数组中:

function getBracedText(input) {
    var re = /\{(.*?)\}/g, matches, output = [];
    while (matches = re.exec(input)) {
        output.push(matches[1]);
    }
    return(output);
}

var str = "Some text {tag} and more {text}";
var results = getBracedText(str);
// results == ["tag", "text"];

工作演示:http: //jsfiddle.net/jfriend00/DT4Km/

于 2012-09-13T01:12:22.293 回答
2

正则表达式在所有语言中几乎相同。如果您想获取介于两者之间的所有内容{}并将其放入数组中,您可以这样做:

var arr = [];
var str = 'Lorem {ipsum dolor} sit {amet} conseteur {adipisci}';
str.replace(/{(.+?)}/g, function(a, b){ arr.push(b) });

console.log(arr); //=> ["ipsum dolor", "amet", "adipisci"]

演示:http: //jsfiddle.net/elclanrs/xeHZn/

于 2012-09-13T01:04:01.910 回答
0

这个表达式应该可以正常工作:

/{([^}]+)}/g
于 2012-09-13T01:10:45.340 回答
0

这样的事情应该做:

 var re = /{[^}]*}/g;
 var s = '{foo},bar,{fum}';

 alert(s.match(re)); // ['{foo}','{fum}']

但您可能不希望包含“{}”。

var re = /{([^}]*)}/g;
var s = '{foo},bar,{fum}';

var a = [];
var b;
while (b = re.exec(s)) {
  a.push(b[1]);
}

alert(a); // ['foo','fum'];

肯定有一种方法可以使用单个正则表达式并且没有循环。

于 2012-09-13T01:11:53.780 回答
0

这是你需要的吗?

var value = "some {example}";
value.match(/{([^}]+)}/); //array[0] = "{example}" --- array[1] = "example"
于 2012-09-13T01:17:32.580 回答
0
var str = '{Some groovy text}not so groovy text';
var regex = /\{(.*?)\}/;
var value = str.match(regex)[1];  // 'Some groovy text';

这将检索括号内的内容。希望这可以帮助。

于 2012-09-13T01:20:37.680 回答