使用正则表达式我们可以采用偶数放置和奇数放置值吗?

时间:2017-09-12 06:27:13

标签: javascript regex

var testSt = "Hello"
testSt.split('').filter((a,b)=>{if(b==0||b%2==0){return a}}).join('') // to get even placed value Hlo

可以通过循环遍历值,并检查索引是否除以2。是否可以直接在字符串上写一个正则表达式和exec来获得偶数放置和奇数放置的值?

Example - testSt.exec(/^\d*[024]$/) //something like this

1 个答案:

答案 0 :(得分:7)

这样的东西?

console.log('abcdefghij'.replace(/(.)./g, '$1'));

RegExp中的.将匹配任何内容,因此/../是匹配一对字符的方法。使用g修饰符将导致字符串中的所有字符对都匹配。这样的匹配在匹配之间不重叠,因此abcdefghij

通过将()放在第一个.周围,它将在每对的第一个字符上形成一个捕获组。 $1是一种用于引用第一个捕获组的特殊语法,因此每对将被该对的第一个字符替换。

因此,例如,字符串中的第一个匹配对是ab,并且将捕获a。因此,ab将替换为a。然后,它会将cd替换为c,将ef替换为e,依此类推。

值得注意的是,对于具有奇数长度的字符串,最终字符将不匹配,但这不是问题,因为我们不想替换它。如果我们想要交换奇数位和偶数位的角色,这将是一个问题,所以我们不能只移动括号。为了使它工作,我们必须在字符串的末尾使第二个字符可选。我们可以使用匹配字符串结尾的$字符来实现:

// This leaves a trailing letter i at the end, which is wrong
console.log('abcdefghi'.replace(/.(.)/g, '$1'));

// Fixed
console.log('abcdefghi'.replace(/.(.|$)/g, '$1'));