我正试图从字符串中抓取数字3和5,例如'矩阵(1,0,0,1,3,5)'我的第一个想法是在逗号上使用.split()
,但这会给我有3个空格,5个有)
作为结果,当然必须有更简洁的方法来使用正则表达式抓住它们并将其分割出来吗?因此,为了获取干净的值,不需要执行冗长的操作。
编辑,字符串结构总是一样的,只有数字会改变。
答案 0 :(得分:6)
您可以使用slice
:
var s = 'matrix(1, 0, 0, 1, 3, 5)';
var m = s.match(/\d+/g).slice(-2);
//=> ["3", "5"]
修改强>
如果您想匹配(...)
之间的数字,请使用:
var m = s.replace(/^.*?\(([^)]+)\).*$/, '$1').match(/\d+/g).slice(-2)
//=> ["3", "5"]
答案 1 :(得分:5)
var str = 'matrix(1, 0, 0, 1, 3, 5)';
var numbers = str
.match(/\d+/g) //["1", "0", "0", "1", "3", "5"] - get the numbers from the string
.slice(-2) //["3", "5"] - return the last two indexes of the4 array
.map(Number); //[3, 5] - convert the strings to numbers.
答案 2 :(得分:0)
只是为了它的乐趣(因为它工作:))
function getMatrixArgs(str) {
return new Function('matrix', 'return ' + s)(function matrix() {
return Array.prototype.slice.call(arguments, -2);
});
}
然后像
一样使用它var matrixStr = 'matrix(1, 0, 0, 1, 3, 5)';
console.log( getMatrixArgs(matrixStr) );
// [3, 5]
如果值是未过滤的用户输入,则不安全。我建议这只是作为正则表达式的替代。此代码支持任何"参数" (例如:'matrix(1, 0, 2, 3.35, 9.87739)'
或'matrix("foo", "bar")'
等)。