只获取字符串中的数字

时间:2015-12-20 11:30:52

标签: javascript regex

我有 [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
}

但它对我不起作用。

2 个答案:

答案 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;
&#13;
&#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,您永远不会遇到execmatch可能null

的情况

注意:这不考虑负数或浮点数或科学数字等。空字符串也会产生[0],因此规范是关键。