如何在字符串的开头和结尾匹配相同的字符

时间:2019-11-13 14:43:16

标签: javascript regex

给出以下字符串:

dfs

我想要以下输出: 真正 真正 假 假 真正 真正 假 真正 是

我有这个正则表达式a b ab ba bab aba abab babab asdgasdgsdgasa

在此调试器中匹配得很好:https://regex101.com/ 但是,它与该调试器中的任何内容都不匹配:https://regexr.com/

那是为什么?

这也是为什么:

^([ab])(?:.*?\1)?$

以下内容是否为假?

console.log(/^([ab])(?:.*?\1)?$/.test('aba'))
true

我的问题是不提供匹配这些字符串的新方法或新的正则表达式。我只想: 1)了解正则表达式调试器之间为何存在此类差异 2)如果我给的正则表达式很好地匹配了这样的字符串 3)为什么第一个控制台日志匹配,而第二个控制台日志不匹配,我应该更改什么才能使其与var re = new RegExp("^([ab])(?:.*?\1)?$"); re.test("aba"); false

一起使用

1 个答案:

答案 0 :(得分:3)

  1. 第一个regex调试器默认情况下启用了多行标志;第二个没有。如果您在第二个中启用多行(m)标志,它将像第一个中一样工作。

  2. ibrahim mahrir pointed out一样,您实际上不需要使用正则表达式。您可以只使用str[0] === str[str.length - 1]

  3. var re = new RegExp("^([ab])(?:.*?\1)?$");中,您需要转义反斜杠:"^([ab])(?:.*?\\1)?$"