Javascript 我需要帮助获取字符串的前n个字符,直到数字字符开始

Javascript 我需要帮助获取字符串的前n个字符,直到数字字符开始,javascript,regex,Javascript,Regex,我正在处理一个字符串,在这个字符串中,我需要提取前n个字符,直到数字开始的地方。最好的方法是什么,因为有时字符串以数字开头:7EUSA8889er898我需要提取7EUSA,但其他字符串示例是SWFX74849948,我需要从该字符串中提取SWFX 我不知道如何使用regex执行此操作我有限的知识在这一点上阻碍了我: ^\w{4}这只得到了前四个字符,但我没有真正的停止点,因为有时字符串可能是somelongstring292894830982,这需要我使用\w获得somelongstring,

我正在处理一个字符串,在这个字符串中,我需要提取前n个字符,直到数字开始的地方。最好的方法是什么,因为有时字符串以数字开头:7EUSA8889er898我需要提取7EUSA,但其他字符串示例是SWFX74849948,我需要从该字符串中提取SWFX

我不知道如何使用regex执行此操作我有限的知识在这一点上阻碍了我:

^\w{4}这只得到了前四个字符,但我没有真正的停止点,因为有时字符串可能是somelongstring292894830982,这需要我使用\w获得somelongstring

,它将匹配包含字符、数字和下划线的单词字符

是否可以匹配可选数字[0-9]?从字符串开始,然后匹配1+次A-Za-z

^[0-9]?[A-Za-z]+
常量正则表达式=/^[0-9]?[A-Za-z]+/; [ 7EUSA8889er898, 一些长串292894830982, SWFX74849948 ].forEachs=>console.logs.matchregex[0] 使用\w将匹配包含字符、数字和下划线的单词字符

是否可以匹配可选数字[0-9]?从字符串开始,然后匹配1+次A-Za-z

^[0-9]?[A-Za-z]+
常量正则表达式=/^[0-9]?[A-Za-z]+/; [ 7EUSA8889er898, 一些长串292894830982, SWFX74849948
].forEachs=>console.logs.matchregex[0] 可以使用此正则表达式代码:

(^\d+?[a-zA-Z]+)|(^\d+|[a-zA-Z]+)
我尝试使用exmaple和good worked:

1-somelongstring 292894830982->somelongstring

2-7sdfsdf5456->7sdfsdf


3-875WER54556->875werwer

可以使用此正则表达式代码:

(^\d+?[a-zA-Z]+)|(^\d+|[a-zA-Z]+)
我尝试使用exmaple和good worked:

1-somelongstring 292894830982->somelongstring

2-7sdfsdf5456->7sdfsdf


3-875WER54556->875werwer

如果要创建函数,其中RegExp由n参数参数化,则

  function getStr(str,n) {
    var pattern = "\\d?\\w{0,"+n+"}";
    var reg = new RegExp(pattern);
    var result = reg.exec(str);
    if(result[0]) return result[0].substr(0,n);
  }

如果要创建RegExp由n参数参数化的函数,则

  function getStr(str,n) {
    var pattern = "\\d?\\w{0,"+n+"}";
    var reg = new RegExp(pattern);
    var result = reg.exec(str);
    if(result[0]) return result[0].substr(0,n);
  }

这是有答案的,但这里有另一种方法

var string1 = '7EUSA8889er898';
var string2 = 'SWFX74849948';

var Extract = function (args) {
    var C = args.split(''); // Split string in array
    var NI = []; // Store indexes of all numbers
    // Loop through list -> if char is a number add its index
    C.map(function (I) { return /^\d+$/.test(I) === true ? NI.push(C.indexOf(I)) : ''; });
    // Get the items between the first and second occurence of a number
    return C.slice(NI[0] === 0 ? NI[0] + 1 : 0, NI[1]).join('');
};
console.log(Extract(string1));
console.log(Extract(string2));

输出

EUSA
SWFX7

这是有答案的,但这里有另一种方法

var string1 = '7EUSA8889er898';
var string2 = 'SWFX74849948';

var Extract = function (args) {
    var C = args.split(''); // Split string in array
    var NI = []; // Store indexes of all numbers
    // Loop through list -> if char is a number add its index
    C.map(function (I) { return /^\d+$/.test(I) === true ? NI.push(C.indexOf(I)) : ''; });
    // Get the items between the first and second occurence of a number
    return C.slice(NI[0] === 0 ? NI[0] + 1 : 0, NI[1]).join('');
};
console.log(Extract(string1));
console.log(Extract(string2));

输出

EUSA
SWFX7

因为很难说你想要匹配什么,我会选择一个普通的正则表达式

^\d?\D+(?=\d)

因为很难说你想要匹配什么,我会选择一个普通的正则表达式

^\d?\D+(?=\d)

澄清一下:你想让所有的字符直到第一次出现一个数字吗?但是如果第一个字符是一个数字,你应该一直到下一个数字吗?如果前2或3个字符都是数字呢?是的,只有第一个字符是数字。但是它必须上升,直到下一个字符是一个数字。因此这将是无效的:78WERRE787979澄清一下:您希望所有字符都上升,直到第一个数字出现?但是如果第一个字符是一个数字,你应该一直到下一个数字吗?如果前2或3个字符都是数字呢?是的,只有第一个字符是数字。但是它必须上升,直到下一个字符是一个数字。所以这将是无效的:78WERERE787979谢谢你的回答!谢谢你的回答!