0

我正在学习 javascript 并被正则表达式 (regex) 弄糊涂了。有时可能是语法,但大多数情况下我对正则表达式的理解很差。例如var pattern = /^0+$/;,对我来说就像垃圾一样。

可以将此 jQuery if/else 语句转换为正则表达式方法吗?如果是这样,如何/为什么?

// Set header link widths based on how many there are

var nav = $('#nav_header a');
var navlinks = $('#nav_header').children('a').length;
if (navlinks == 1) {
    nav.css('width', '100%');
} else if (navlinks == 2) {
    nav.css('width', '50%');
} else if (navlinks == 3) {
    nav.css('width', '32%');
} else if (navlinks == 4) {
    nav.css('width', '25%');
} else if (navlinks == 5) {
    nav.css('width', '20%');
} else if (navlinks == 6) {
    nav.css('width', '16.6%');
} else if (navlinks == 7) {
    nav.css('width', '14.25%');
} else if (navlinks == 8) {
    nav.css('width', '12%');
} else if (navlinks == 9) {
    nav.css('width', '11%');
} else if (navlinks == 10) {
    nav.css('width', '10%');
} else {
    nav.css('width', '8%');
}

是否有编写正则表达式 JS 的特定技术、需要考虑的事项并尝试保持其可读性?

感谢您的帮助和建议:)

4

3 回答 3

5

我的建议,创建一个简单的查找数组:

var percents = ["100%", "50%", "32%", "25%", "20%", "16.6%", "14.25%", "12%", "11%", "10%", "8%"];

var nav = $('#nav_header a');
var navlinks = $('#nav_header').children('a').length;
navlinks == 0 ? nav.css("width", "8%") : nav.css("width", percents[navlinks - 1]);
于 2013-10-16T14:09:06.233 回答
2

var 模式 = /^0+$/; 对我来说就像垃圾一样。

其实这很简单,它只匹配一个字符串,如果该字符串只包含0s。

可以将此 jQuery if/else 语句转换为正则表达式方法吗?如果是这样,如何/为什么?

不,它不能。正则表达式用于在文本中查找模式或围绕给定模式拆分文本或替换给定模式。它们不能用来代替条件语句。

于 2013-10-16T14:09:59.327 回答
0

你不需要正则表达式:)

var nav = $('#nav_header a');
var navlinks = $('#nav_header').children('a').length;
var widths = ['100%', '50%', '32%', '25%', '20%', '16.6%', '14.25%', '12%', '11%', '10%']
nav.css('width', (navlinks >= 1 && navlinks <= 10) ? widths[navlinks-1] : '8%')
于 2013-10-16T14:10:25.963 回答