JavaScript中从字符串首个数字处截断字符串的实现方法
解决方案:从首个数字位置截断字符串
你的需求是保留字符串中第一个数字出现之前的所有内容,原来的代码思路是删除数字和特殊字符,这和“截断”的目标不符,所以达不到预期效果。下面给你两种简单有效的实现方式:
方法一:使用正则表达式直接替换
利用正则匹配从第一个数字开始到字符串结尾的所有内容,将其替换为空字符串即可:
const title = "IX - Delivery Received 1/15/2018 9:34:00 AM "; const finalname = title.replace(/\d.*/, ''); console.log(finalname); // 输出:"IX - Delivery Received "
- 正则说明:
\d匹配第一个数字,.*匹配该数字之后的所有字符(包括特殊符号、空格等),替换为空就得到了我们需要的前缀部分。
方法二:通过索引截取字符串
先找到第一个数字的位置,再用slice方法截取该位置之前的内容,这种方式更直观,还能处理字符串中没有数字的边界情况:
const title = "IX - Delivery Received 1/15/2018 9:34:00 AM "; const firstDigitIndex = title.search(/\d/); // 如果找不到数字,就返回原字符串,避免报错 const finalname = firstDigitIndex !== -1 ? title.slice(0, firstDigitIndex) : title; console.log(finalname); // 输出:"IX - Delivery Received "
为什么你的原代码无效?
你原来的代码:
var finalname = title.replace(/[0-9]/g, ''); var specialchar = finalname.replace(/[^A-Z0-9]/ig, "");
- 第一步
replace(/[0-9]/g, '')只是删除了所有数字,但保留了日期里的/、时间里的:和空格; - 第二步
replace(/[^A-Z0-9]/ig, "")又删除了所有非字母数字的字符,包括空格、-这些你想保留的内容,所以最终结果会变成IXDeliveryReceived,完全不符合需求。
内容的提问来源于stack exchange,提问作者user7776356
相关产品推荐
相关产品推荐

