我有一个我需要正确分开的字符串:
self.view.frame.size.height = 44
我只需要view
,frame
,size
和height
。我需要用正则表达式来做。
到目前为止,我已经尝试了很多变体,其中没有一个甚至接近我想要的。我的代码现在看起来像这样:
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的新手,所以也许我想要不可能,让我知道。 感谢。
答案 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);