如何在javascript中获取邮政编码的首字母?我只需要数字开始之前的字母,就像这样:
E.g - 'L159XU' would return 'L' E.g - 'TW136PZ' would return 'TW'
我最初是这样做的:
const letters = postcode.substring(0, 2);
但是有的只有一个字母,而有的有两个,有没有办法做到这一点?
py49o6xq1#
我测试了这个:HTML
<p id="test"></p>
JavaScript正则表达式
let text = 'TW136PZ'; let pattern = /[a-zA-Z]+|[0-9]+/g; let result = text.match(pattern); document.getElementById("test").innerHTML = result[0]; // return "TW"
7xzttuei2#
使用带有正则表达式的split函数,
split
let res = "TW136PZ".split(/[0-9]+/)[0] ; // TW
关于regex here
dhxwm5r43#
存在不同的有效实现
function callX() { return 'TW136PZ'.slice(0, 'TW136PZ'.search(/[0-9]/)) } function callY() { return 'TW136PZ'.split(/[0-9]+/)[0] } function callZ() { return 'TW136PZ'.match( /^[a-zA-Z]+/ )[0] }
在对这些进行基准测试时:
performance.mark("beginX"); for (let i = 0; i < 10000000; ++i) { callX(); } performance.mark("endX"); performance.mark("beginY"); for (let i = 0; i < 10000000; ++i) { callY(); } performance.mark("endY"); performance.mark("beginZ"); for (let i = 0; i < 10000000; ++i) { callZ(); } performance.mark("endZ"); performance.measure("X","beginX","endX"); performance.measure("Y","beginY","endY"); performance.measure("Z","beginZ","endZ"); console.log(performance.getEntriesByType("measure"))
第一个实现是最快的,而第二个实现(使用split)是最慢的。我认为这是由于不需要示例化另一个数组。
yyhrrdl84#
发布一个不使用正则表达式的解决方案,因为我还没有看到一个:
function parsePostcode(postcode) { const charIsADigit = function(ch) { const code = ch.charCodeAt(0) return code >= 48 && 58 > code; }; let prefix = "" for (let i = 0; i < postcode.length; ++i) { const ch = postcode[i] const is_digit = charIsADigit(ch) if (is_digit) break; prefix += ch } return prefix; } console.log(parsePostcode("L159XU")) console.log(parsePostcode("TW136PZ"))
00jrzges5#
const postc='TwA1234'; const letters=postc.match( /^[a-zA-Z]+/ )[0]; console.log(letters);
^-输入开始a-z-包含小写英语字母A-Z-包括大写+-出现一次或多次!如您所愿,它返回一个字符串,其中包含所需数量的拉丁字母,本例中为三个。
^
a-z
A-Z
+
5条答案
按热度按时间py49o6xq1#
我测试了这个:HTML
JavaScript正则表达式
7xzttuei2#
使用带有正则表达式的
split
函数,关于regex here
dhxwm5r43#
存在不同的有效实现
在对这些进行基准测试时:
第一个实现是最快的,而第二个实现(使用
split
)是最慢的。我认为这是由于不需要示例化另一个数组。yyhrrdl84#
发布一个不使用正则表达式的解决方案,因为我还没有看到一个:
00jrzges5#
^
-输入开始a-z
-包含小写英语字母A-Z
-包括大写+
-出现一次或多次!如您所愿,它返回一个字符串,其中包含所需数量的拉丁字母,本例中为三个。