我需要从一个包含数字、字母和特殊字符的字符串中获取单独的数字+特殊字符+字母。我的尝试
var chars = str.slice(0, str.search(/[a-zA-Z]+/)); var numbs = str.replace(chars, '');
字符串如果没有字母,代码就不起作用。它应该如何工作的例子
'123.331abc' -> '123.331' + 'abc' '12331abc123' -> '12331' + 'abc123'
型
fivyi3re1#
你可以用正则表达式得到这两个部分:
const arr = [ '123', '123.331', '123.331abc', '12331abc123' ]; const splitBeforeLetter = str => str.match(/([^A-Za-z]+)(.*)/).slice(1); console.log(...arr.map(splitBeforeLetter));
字符串
vaj7vani2#
const test = "123.887azee7"; const firstLetterIndex = test.search(/[a-zA-Z]/); // return the index of the first letter found, "-1" otherwise
字符串那么你就用String.prototype.substring()
if (firstLetterIndex !== -1) { const firstSubstring = test.substring(0, firstLetterIndex); // out put 123.887 const secondSubstring = test.substring(firstLetterIndex); // output azee7 } else { console.log('no letters founed'); // or do whatever you want }
2nc8po8w3#
匹配第一部分,然后.slice()得到第二部分:
.slice()
const [firstPart] = string.match(/^[^a-z]*/i); const secondPart = string.slice(firstPart.length);
字符串^[^a-z]*表示开头有0个或多个非字母。由于*量词的性质,这将始终匹配,从而导致第一个元素是第一部分的匹配数组。试试看:
^[^a-z]*
*
console.config({ maximize: true }); const testcases = [ '12331abc123', '123.331abc', 'abc123', 'abc', '123', ]; function splitBeforeFirstLetter(string) { const [firstPart] = string.match(/^[^a-z]*/i); const secondPart = string.slice(firstPart.length); return [firstPart, secondPart]; } testcases.forEach( testcase => console.log(testcase, splitBeforeFirstLetter(testcase)) );
<script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
的数据
3条答案
按热度按时间fivyi3re1#
你可以用正则表达式得到这两个部分:
字符串
vaj7vani2#
字符串
那么你就用String.prototype.substring()
型
2nc8po8w3#
匹配第一部分,然后
.slice()
得到第二部分:字符串
^[^a-z]*
表示开头有0个或多个非字母。由于*
量词的性质,这将始终匹配,从而导致第一个元素是第一部分的匹配数组。试试看:
的数据