我有 [12,3,4,5,7,88]
等字符串
我想从仅字符串数字中获取并将其写入数组: var str='12 3 44 5 \n 7 88';
alert(str);
var re =/^\S+$/;
var res=re.exec(str);
alert(res[0]);
alert(res[1]);
alert(res[2]);
。
我想用RegExp做这件事:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell")!
let myView = UIView()
myView.backgroundColor = UIColor.redColor()
myView.translatesAutoresizingMaskIntoConstraints = false
cell.addSubview(myView)
let horizontalConstraint = NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: cell, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
cell.addConstraint(horizontalConstraint)
let verticalConstraint = NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: cell, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)
cell.addConstraint(verticalConstraint)
let widthConstraint = NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: cell, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0)
cell.addConstraint(widthConstraint)
let heightConstraint = NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: cell, attribute: NSLayoutAttribute.Height, multiplier: 1, constant: 0)
cell.addConstraint(heightConstraint)
return cell
}
但它对我不起作用。
答案 0 :(得分:4)
正确的方式:
var str = '12 3 44 5 \n 7 88';
//if there matches, store them into the array, otherwise set 'numbers' to empty array
var numbers = str.match(/\d+/g)?str.match(/\d+/g):[];
//to convert the strings to numbers
for(var i=0;i<numbers.length;i++){
numbers[i]=+numbers[i]
}
alert(numbers);
&#13;
为什么呢? .match()
在那里使用起来更容易。 \d+
获取任意长度的数字,标志g
返回所有匹配,而不仅仅是第一个匹配。
如果您还想匹配浮点数,则正则表达式将为/\d+([\.,]\d+)?/g
。它还匹配42,12或42.12。
答案 1 :(得分:1)
可能的替代
var s = '12 3 44 5 \n 7 88';
var numbers = s.split(/[^\d]+/).map(Number);
document.getElementById('out').textContent = JSON.stringify(numbers);
console.log(numbers);
<pre id="out"></pre>
使用split
,您永远不会遇到exec
或match
可能null
注意:这不考虑负数或浮点数或科学数字等。空字符串也会产生[0]
,因此规范是关键。