使用正则表达式拆分字符串

时间:2014-08-16 00:11:12

标签: javascript arrays regex string

我有一个我需要正确分开的字符串:

self.view.frame.size.height = 44

我只需要viewframesizeheight。我需要用正则表达式来做。 到目前为止,我已经尝试了很多变体,其中没有一个甚至接近我想要的。我的代码现在看起来像这样:

var testString = 'self.view.frame.size.height = 44'
var re = new RegExp('\\.(.*)\\.', "g")
var array = re.exec(testString);
console.log('Array length is ' + array.length)
for (var i = 0; i < array.length; i++) {
    console.log('<' + array[i] + ">");
}

它根本不起作用:

Array length is 2
<.view.frame.size.>
<view.frame.size>

我是Javascript的新手,所以也许我想要不可能,让我知道。 感谢。

3 个答案:

答案 0 :(得分:3)

在Javascript中,使用g修饰符执行正则表达式并不会立即返回所有匹配项。您必须在相同的输入字符串上重复执行它,并且每个都返回下一个匹配。

您还需要更改正则表达式,以便一次只返回一个单词。 .*是贪婪的,因此它会返回最长的匹配,因此它会返回第一个和最后一个.之间的所有单词。 [^.]*将匹配一系列非点字符,因此它只返回一个单词。您不能在正则表达式中包含第二个.,因为这会干扰重复 - 每次重复都会在上一个匹配结束后开始搜索,并且没有开头{{1在单词的结尾.之后。此外,在.之后还没有.,所以最后一个单词不会与之匹配。

编辑:我已将正则表达式更改为使用height而不是\w*,因为它抓取整个[^.]*字符串而不只是height = 44。< / p>

height

答案 1 :(得分:1)

如果您确定数据的格式始终相同,则可以使用此格式:

function parse (string) {
    return string.split(" = ").shift().split(".").splice(1);
}

答案 2 :(得分:0)

在您的上下文中,split是更好的选择:

var str = "self.view.frame.size.height = 44";
var bits1 = str.split(" ")[0];
var bits2 = bits1.split(".");
bits2.shift(); // get rid of the unwanted self
console.log(bits2);