我目前有一个返回这组数据的字符串:
7,438,686 IN NONRESET CNTR
172,269 IN RESET CNTR1
0 IN RESET CNTR2
18,895,900 CM NONRESET CNTR
437,602 CM RESET CNTR1
10 CM RESET CNTR2
SELECTED ITEMS PASSWORD LEVEL
我唯一关注的数据是' RESET CNTR2'价值' 10 CM'。如何使用JavaScript创建仅包含' 10 CM'?的字符串? ' 10 CM'是动态数据。
提前谢谢大家!
答案 0 :(得分:1)
您可以使用正则表达式来提取该段文本。用regex tester玩一下就可以看出
function ObserverList(){
this.observerList = []
this.listeners = []
}
ObserverList.prototype.add = function( obj ){
this.observerList.push(obj)
this.listeners.forEach(function(callback){
callback({type:'add', obj:obj})
})
}
ObserverList.prototype.onChange = function(callback){
this.listeners.push(callback)
}
是您可能正在寻找的正则表达式。然后,要使用它,您只需执行以下操作:
/((\d+) CM) *RESET CNTR2/
然后var regex = /((\d+) CM) *RESET CNTR2/;
var string = "7,438,686 IN ....";
var captureGroups = regex.exec(string);
包含captureGroups[1]
而10 CM
只包含captureGroups[2]
。
答案 1 :(得分:0)
RESET CNTR2
在您的数据集中出现两次。该值是否必须与CM
连接,并且所有值都在新行上?
以下内容可以解决您的问题:
const key = 'RESET CNTR2',
metrics = 'CM';
const data = `
7,438,686 IN NONRESET CNTR
172,269 IN RESET CNTR1
0 IN RESET CNTR2
18,895,900 CM NONRESET CNTR
437,602 CM RESET CNTR1
10 CM RESET CNTR2
SELECTED ITEMS PASSWORD LEVEL
`.split('\n');
let index = data.findIndex(str => str.indexOf(key) > -1 && str.indexOf(metrics) > -1);
let row = data[index];
let val = row.substring(0, row.indexOf(metrics));
console.log(val);
// or if you need the 'cm' part
console.log(`${val}${metrics}`);
答案 2 :(得分:0)
我认为应该这样做
var str = `7,438,686 IN NONRESET CNTR
172,269 IN RESET CNTR1
0 IN RESET CNTR2
18,895,900 CM NONRESET CNTR
437,602 CM RESET CNTR1
10 CM RESET CNTR2
SELECTED ITEMS PASSWORD LEVEL `;
var rows = str.split('\n');
for ( var n in rows ) {
if ( rows[n].indexOf('RESET CNTR2') != -1 ) {
var rowbits = rows[n].trim().split(' ');
if( parseInt(rowbits[0]) > 0 ){
console.log(rowbits[0]);
}
}
}