Javascript 如何处理字符串以使字符保持在最后一位?

Javascript 如何处理字符串以使字符保持在最后一位?,javascript,string,Javascript,String,给定字符串,如G08a,Professor3,Obs 如何在最后一个数字后分割这些字符串,使其返回: G08a ==> G08 Professor3 ==> Professor3 Obs ==> Obs let str = "foo9bar"; str = str.match(/(.*\d)|(.*\d?)/g)[0]; // str is now foo9 启动JSFIDLE:您可以使用正则表达式来完成此操作 var ss=[“G08a”

给定字符串,如
G08a
Professor3
Obs

如何在最后一个数字后分割这些字符串,使其返回:

G08a        ==> G08
Professor3  ==> Professor3
Obs         ==> Obs
let str = "foo9bar";
str = str.match(/(.*\d)|(.*\d?)/g)[0]; // str is now foo9

启动JSFIDLE:

您可以使用正则表达式来完成此操作

var ss=[“G08a”,“Professor3”,“Obs”];
var res=ss.map(s=>(/^(.*?\d)\d*$/.exec(s)| |[,s])[1]);

控制台日志(res)您可以通过搜索被数字覆盖的任何字符或后跟非数字或字符串结尾的任何字符来匹配字符串

console.log(['G08a','Professor3','Obs','abc123def456ghi'].map(函数){
返回s.match(/^.*\d |.*(=\d |$)/)[0];

}));首先,您需要在字符串中找到第一个数字的位置

var str = "G08a";
var match = str.match(/(\D+)?\d/)
var index = match ? match[0].length-1 : -1;
然后制作子字符串

var result =str.substring(0,index);

简洁明了:

G08a        ==> G08
Professor3  ==> Professor3
Obs         ==> Obs
let str = "foo9bar";
str = str.match(/(.*\d)|(.*\d?)/g)[0]; // str is now foo9
let elem=document.getElementById('txt');
elem.innerHTML=elem.innerHTML.match(/(.*\d)|(.*\d?)/g)[0]

foo9bar

为什么要切片?保持我想保留左边的部分。如果你知道一个更好的词,我赞成。在你的例子中,它们并不都遵循相同的模式。我的道歉。@HugoLOPEZ请看我的答案,您需要的唯一正则表达式是
/.*\d/
var res=ss.map(函数){return(/^(.*\d)\d*?$/.exec(s)| |[,s])[1]})
@HugoLOPEZ:是的,如果你是这样问的话,传统函数语法就是这样的。因为目标是上升到最后一位,我想你需要考虑一些类似于
“abc123def456ghi”
的东西。匹配应该通过
6
,而不是
3
@rockstar,我不相信,因为op-question缺少更多的用例来验证regex.True,但是问题描述很明确,它应该是字符串中的最后一个数字。无论如何,这是值得指出的,以便OP知道在找到第一个数字序列中的最后一个数字后它将停止。@rockstar,我对正则表达式进行了chnaaged。现在应该可以了。对于
str=“Obs”
,您的提案将返回
null
。使用
str.match(/\d/)?str=str.match(/.*\d/)[0]:str=str因此它在所有情况下都有效。这不完全正确。你的答案在数字前剪切任何文本。问题是删去最后一个数字(包括数字)之前的所有文字。