我正在使用一个字符串,在该字符串中,我需要提取前n个字符,直到数字开始。最好的方法是什么,因为有时字符串以数字开头:7EUSA8889er898
我需要提取7EUSA
但是其他字符串示例是SWFX74849948
,我需要提取来自该字符串的SWFX
。
不知道如何使用正则表达式执行此操作,因为我有限的知识在这一点上阻止了我:
^(\w{4})
只是让我获得前四个字符,但我实际上并没有停止点,因为有时字符串可能是somelongstring292894830982
,这需要我获得somelongstring
>
答案 0 :(得分:5)
使用\w
将匹配一个包含字符,数字和下划线的单词字符。
您可以从字符串[0-9]?
开始匹配一个可选数字^
,然后匹配1+次A-Za-z
^[0-9]?[A-Za-z]+
const regex = /^[0-9]?[A-Za-z]+/;
[
"7EUSA8889er898",
"somelongstring292894830982",
"SWFX74849948"
].forEach(s => console.log(s.match(regex)[0]));
答案 1 :(得分:1)
由于很难告诉您要匹配的内容,因此我会使用常规的正则表达式
^\d?\D+(?=\d)
答案 2 :(得分:0)
可以使用此正则表达式代码:
(^\d+?[a-zA-Z]+)|(^\d+|[a-zA-Z]+)
我尝试过exmaple,并且效果很好:
1- somelongstring292894830982-> somelongstring
2- 7sdfsdf5456-> 7sdfsdf
3- 875werwer54556-> 875werwer
答案 3 :(得分:0)
如果您要创建其中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);
}
答案 4 :(得分:0)
有解决方法,但这是另一种方法。
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