【问题标题】:javascript regex to check if first and last character are similar?javascript正则表达式检查第一个和最后一个字符是否相似?
【发布时间】:2025-12-02 13:35:01
【问题描述】:

是否有任何简单的方法来检查字符串的第一个和最后一个字符是否相同,仅使用正则表达式?

我知道你可以用 charAt 检查

var firstChar = str.charAt(0);
var lastChar = str.charAt(length-1);
console.log(firstChar===lastChar):

我不是要这个:Regular Expression to match first and last character

【问题讨论】:

  • 您为什么要使用正则表达式来处理无需正则表达式就可以轻松完成的事情?
  • @DavidThomas ,这不是我要检查的唯一规则,我正在检查很多其他规则,我想知道我是否可以在一个正则表达式中完成所有这些规则。

标签: javascript regex


【解决方案1】:

您可以将正则表达式与capturing group 及其backreference 结合使用,通过捕获第一个字符来断言起始字符和结束字符相同。要测试正则表达式匹配,请使用RegExp#test 方法。

var regex = /^(.).*\1$/;

console.log(
  regex.test('abcdsa')
)
console.log(
  regex.test('abcdsaasaw')
)

Regex explanation here :

  1. ^ 断言字符串开头的位置
  2. 第一捕获组(.)
  3. .* 匹配任何字符(换行符除外) - 从零到无限次,尽可能多次,根据需要返回(贪婪)
  4. \1 匹配第一个捕获组最近匹配的相同文本
  5. $ 在字符串末尾断言位置

. 不包含换行符,为了包含换行符更新正则表达式。

var regex = /^([\s\S])[\s\S]*\1$/;

console.log(
  regex.test(`abcd

sa`)
)
console.log(
  regex.test(`ab
c
dsaasaw`)
)

参考:How to use JavaScript regex over multiple lines?

Regex explanation here :

  1. [.....] - 匹配存在的单个字符
  2. \s - 匹配任何空白字符(等于[\r\n\t\f\v ]
  3. \S - 匹配任何非空白字符(等于[^\r\n\t\f ]

最后[\s\S] 匹配任何字符。

【讨论】:

  • @Milad : 模式匹配的测试方法检查
  • 匹配任意字符[\s\S]的模式等价于[^]
  • @PranavCBalan ,我知道那个家伙,我的意思是哪个部分正在执行检查第一个和最后一个字符的魔法,为什么?
  • @Milad : 其中^$ 断言开始和结束位置(称为开始和结束锚点)....然后使用捕获组捕获第一个字符并检查最后一个char 与反向引用相同(被捕获,\1
【解决方案2】:

你可以试试

const rg = /^([\w\W]+)[\w\W]*\1$/;
console.log(
  rg.test(`abcda`)
)
console.log(
  rg.test(`aebcdae`)
)
console.log(
  rg.test(`aebcdac`)
)

【讨论】:

    【解决方案3】:
        var rg = /^([a|b])([a|b]+)\1$|^[a|b]$/;
    
        console.log(rg.test('aabbaa'))
    
        console.log(rg.test('a'))
    
        console.log(rg.test('b'))
    
        console.log(rg.test('bab'))
    
        console.log(rg.test('baba'))
    

    这将确保字符是具有相同开头和结尾的 a 和 b。

    它也会匹配单个字符,因为它们也以相同的字符开头和结尾。

    【讨论】:

      最近更新 更多