正则表达式

Regular Expression

如果文本输入包含双引号但后面没有反斜杠,我需要显示警告。所以我使用 'negative lookbehind' 正则表达式并实现了这个目标。

text.innerHTML.match(/(?<!\)\"/);

" -> 警报
\" -> 确定

但是,我发现一个问题,当用户在文本框中输入缩进时,所见即所得(Quill)会生成一个名为“ql-indent-N(缩进级别从 1 开始)”的 class,这会触发通过 " 检测发出警报。

因此,我在原始正则表达式中添加了另一个例外,如下所示。

text.innerHTML.match(/(?<!\)(?<!class=)\"/);

但它没有用,所以我在控制台中尝试了一些测试,然后看到了

当我刚放
时它工作正常 class="
-> 确定

然而,当它在像
这样的真实标签中时它不起作用

文本


-> 警报

我怎样才能使后视 reg exp 与那些

一起正常工作?或者任何其他实现相同目标的慷慨建议——显示双引号的警告,后面没有反斜杠,也没有

?下面是文本框的基本结构。

<div class="ql-editor" data-gramm="false" contenteditable="true">
<p>text</p>
</div>

Dealing Quill 的 delta 格式非常复杂。

如评论中所述,您可以引用元素 innerText 而不是其 innerHTML 以忽略所见即所得编辑器插入的任何标签。

示例(这里我使用 RegExp.prototype.test() 而不是 RegExp.prototype.match()

const qEditor = document.querySelector('.ql-editor');
const re = /(?<!\)"/gm;

qEditor.addEventListener('input', () => {
    if (re.test(qEditor.innerText)){
    window.alert('All double-quotes (") must be escaped (\")');
  }
})
<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">

<div id="editor" class="ql-editor" data-gramm="false" contenteditable="true">
  <p>text</p>
</div>

<script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
<script>
  var quill = new Quill('#editor', {
    theme: 'snow'
  });
</script>