奇怪的结果还是我错了?

时间:2014-05-09 15:12:26

标签: javascript regex

我有以下字符串[row element="div"]This is a row[/row],我喜欢使用JavaScript和Regex从此字符串中提取div属性和字符串This is a row

我尝试执行此操作的方式如下:

var string = '[row element="div"]This is a row[/row]';
var $d     = string.match(/\[row element="([^"]+)"\](.*?)\[\/row\]/g);

console.log($d);

结果是:

[row element="div"]This is a row[/row]

所以,问题是,我做错了,还是代码表现得很奇怪?

如果这是错误的,我如何从string变量中提取所需的部分?

2 个答案:

答案 0 :(得分:1)

问题是/g.match与子图案不兼容。

相反,请尝试相反的方式:

var regex = /......../g;
var $d = regex.exec(string);

console.log($d);

结果应该是一个数组,包含索引0处的整个匹配,第一个子模式为1,第二个子模式为2。

您可以反复调用.exec以查看是否还有其他[row element="foo"]bar[/row]模式匹配。如果没有更多匹配,.exec将返回null

答案 1 :(得分:1)

您可以使用:

var $d = string.match(/\[row element="(?:[^"]+)"\](.*?)\[\/row\]/)[1];
//=> "This is a row"