【问题标题】:Regex match text followed by white space or nothing at all正则表达式匹配文本后跟空格或根本没有
【发布时间】:2019-01-29 08:47:05
【问题描述】:

我正在尝试将纯文本格式化为富 JavaScript 文本,这是我的代码中突出显示 一些示例关键字的部分:

var sampleKeywords = '(function|var|throw|return|class)\s';

elem.innerHTML = elem.textContent.replace(new RegExp(sampleKeywords, 'g'), function(val) {
    return `<mark>${val}</mark>`;
});

上面的代码突出显示了文本中出现的任何带有空格的示例关键字。 这是为了防止突出显示输入,例如function123

话虽如此,我仍然想突出显示 function 之类的输入,后面没有任何内容。

基本上,我想突出显示任何示例关键字,后跟空格或根本不后跟任何内容。

如何在我的正则表达式模式中实现这一点?

注意:我知道我的代码存在明显缺陷,例如突出显示引用的文本或没有突出显示每个可用的 JavaScript 关键字,但上面提供的代码只是抽象 ;不完整。

【问题讨论】:

  • This is to prevent highlighting input such as "not_a_function"not_a_ 出现在之前,而不是之后?您是否要检查文本是否在 之后是空格或什么都没有?
  • @CertainPerformance 同意。如前所述,代码包含一些缺陷。这里的重点是检测文本后跟空格或什么都没有。
  • 我还将示例输入从 not_a_function 更改为 function123 以避免混淆。

标签: javascript regex


【解决方案1】:

您的要求的字面翻译产生(?=\s|$)(“后跟空格或字符串结尾”)。

但是,您可以简单地反转您的条件:(?!\S)(“后面没有非空格字符”)

您可能还想查看 \b(单词边界):\bfoo\b 匹配 foo 前面或后面没有单词字符(即字母、数字或 _)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多