【问题标题】:jQuery regex can't match when string starts with "<" character当字符串以“<”字符开头时,jQuery 正则表达式无法匹配
【发布时间】:2019-08-26 19:59:45
【问题描述】:

我正在尝试查看字符串的开头是否有“regex101.com 中运行良好,但在我在个人文件中尝试时却不行。

输入backslash 就可以正常工作,输入&amp;lt; 就不行了。

$(function() {

  $(document).on('keyup', '.input', function() {
    var str = $(this).html();

    // not working
    if (str.match(/^</)) {
      console.log('starts with "<" character');
    }

    // but this works??
    if (str.match(/^\\/)) {
      console.log('starts with backslash');
    }


  });

});
.input {
  border: 1px solid #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="input" contenteditable></div>

【问题讨论】:

  • 您的代码应该可以工作(即使没有反斜杠)。 HTML 元素在标签开始之前是否有换行符或空格?这会使(str.match(/^&lt;/)) 失败。
  • '&lt;foo'.match(/^&lt;/) 有效,所以我猜还有别的东西。调试字符串console.log(escape(str))
  • 如果您改为测试innerHTML 属性是否有效?
  • &amp;lt; 字符被替换为 &amp;lt;

标签: javascript jquery regex


【解决方案1】:

Javascript 可以将&amp;lt; 符号编码为&amp;lt;。尝试做console.log(str); 看看是否发生这种情况(当我在浏览器中尝试时它发生了)。

如果是这种情况,请将模式中的 &amp;lt; 符号替换为 &amp;lt;,如下所示:

    if (str.match(/^&lt;/)) {
        console.log('starts with "<" character');
    }

【讨论】:

  • 这行得通,我可以发誓我试过了。谢谢!
  • @Souleste 很容易忽略的事情。很高兴这对你有用。
猜你喜欢
  • 1970-01-01
  • 2014-08-15
  • 2016-07-12
  • 2016-12-07
  • 2015-02-26
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多