在javascript中从字符串中提取数据的更有效方法?

在javascript中从字符串中提取数据的更有效方法?,javascript,node.js,Javascript,Node.js,我有一些来自聊天客户端的消息,我想对其进行解析,以获得一个#符号,然后在其后面提取1-3个数字,再加上数字后面的一个字母。因为我不知道数字是1、2还是3位数,所以我将每个数字作为一个整数进行测试,然后分配变量。我想出了以下代码,但我的编程技能是非常基本的 var test = 'it doesnt matter how long the message is I only need #222c'; var QuID = ''; var Qans = ''; var regInteger = /^

我有一些来自聊天客户端的消息,我想对其进行解析,以获得一个#符号,然后在其后面提取1-3个数字,再加上数字后面的一个字母。因为我不知道数字是1、2还是3位数,所以我将每个数字作为一个整数进行测试,然后分配变量。我想出了以下代码,但我的编程技能是非常基本的

var test = 'it doesnt matter how long the message is I only need #222c';
var QuID = '';
var Qans = '';
var regInteger = /^\d+$/;


//this function checks to see if a charactor is an integer
function isInteger( str ) {    
    return regInteger.test( str );
}

var IDloc = test.indexOf('#') + 1;
var IDloc2 = test.indexOf('#') + 2
console.log(IDloc);

//This is a brute force method to test if there is a 1-3 digit number and assigning the question number and question answer into variables. Sloppy but it's duct tape and wire programming my friend!
if(isInteger(test.substring(IDloc, IDloc2))) {
   QuID = (test.substring(IDloc, IDloc2));
   Qans = (test.substring((IDloc + 1), (IDloc2 + 1)));
    if (isInteger(test.substring((IDloc +1), (IDloc2 + 1)))) {
        QuID = (test.substring(IDloc, (IDloc2 + 1)));
        Qans = (test.substring((IDloc + 2), (IDloc2+ 3)));
            if (isInteger(test.substring((IDloc + 2), (IDloc2 + 2)))) {
                QuID = (test.substring(IDloc, (IDloc2 + 2)));
                Qans = (test.substring((IDloc + 3), (IDloc2 + 4)));
            }
    }

   console.log( QuID );
   console.log( Qans );
} else {
   console.log( 'Non Integer' );
}

有没有更有效的方法来编写代码,因为我觉得这是一种蛮力方法。

您可以搜索
#
并将数字保留下来

var getNumber=s=>(s.match(/#(\d+/)| |[])[1];
log(getNumber(‘消息的长度无关紧要,我只需要#222c’);
log(getNumber('foo'));

console.log(getNumber('fo2o'))您可以搜索
#
并将数字放在后面

var getNumber=s=>(s.match(/#(\d+/)| |[])[1];
log(getNumber(‘消息的长度无关紧要,我只需要#222c’);
log(getNumber('foo'));
console.log(getNumber('fo2o'))
只是一个非正则表达式的答案

var result = test.match(/#(\d{1,3})([a-zA-Z])/);
if (result) {
    var numbers = result[1];
    var character = result[2];
}
只是一个非正则表达式的答案

var result = test.match(/#(\d{1,3})([a-zA-Z])/);
if (result) {
    var numbers = result[1];
    var character = result[2];
}
这会将1-3个数字(在一个#符号之后)和一个字符(在a-z小写和大写范围内,如果您需要任何特殊字符,如äüß,则需要添加它们)提取到两个不同的捕获组中,然后将这些捕获组读入两个变量中。请注意,这仅提取第一个匹配项


这会将1-3个数字(在一个#符号之后)和一个字符(在a-z小写和大写范围内,如果您需要任何特殊字符,如äüß,则需要添加它们)提取到两个不同的捕获组中,然后将这些捕获组读入两个变量中。请注意,这仅提取第一个匹配项。

使用正则表达式使用组匹配项提取值。使用正则表达式使用组匹配项提取值。