javascript - 正则表达式 : Why this regex doesn't match "not starts with" two letter?

标签 javascript regex

我尝试匹配一个不以“t”开头的单词

例如

/^[^t]est$/.test('test') # false

/^[^t]est$/.test('best') # true

但是当我尝试将长度设置为 2 时,它不起作用:

/^[^t]{2,2}st$/.test('ttst') # false

/^[^t]{2,2}st$/.test('tbst') # false (should be true)

/^[^t]{2,2}st$/.test('bbst') # true

tbst 仅包含一个t,因此不应匹配

谁能解释一下为什么?谢谢

最佳答案

正则表达式按书面方式工作:

/^[^t]{2,2}st$/
  • ^ 断言字符串开头的位置
  • [^t]{2,2} 匹配下面列表中不存在的单个字符 量词:{2,2} 正好 2 次
  • t 文字字符 t(区分大小写)
  • st 与字面上的字符 st 匹配(区分大小写)
  • $ 在字符串末尾断言位置

您也不需要执行 {2,2},因为这是一个范围,您可以对 2 个匹配项执行 {2},或者对 1 至 2 个匹配项执行 {1,2}。

REGEX101

这个示例应该可以很好地说明该正则表达式中发生的情况。

如果您正在寻找解决方案:匹配任何不以 tt 开头的单词(区分大小写),您可以使用以下内容:

/^(?!tt)\w+$/

PROOF

希望这有帮助。

关于javascript - 正则表达式 : Why this regex doesn't match "not starts with" two letter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29776741/

相关文章:

javascript - 动态下拉菜单 Node js

javascript - 滚动到页面的特定部分后启动 CSS 动画

javascript - 图表未创建

javascript - 组匹配之间的正则表达式匹配文本

javascript - 在 Windows 10 上重新运行 Node.js 服务器时出现 EADDRINUSE 错误

javascript - 进行多次提取并返回结果的单个异步函数?

javascript - 使用 JavaScript 的正则表达式从 SQL 查询字符串中删除注释

java - 分割字符串的数字列表

regex - 哪个更有效的正则表达式?

php - 在 PHP 中用一个空格替换多个(仅内部)空格?