正则表达式匹配除 AND、OR 和 NOT 之外的所有单词

2023-12-09

在我的 javascript 应用程序中,我有这个随机字符串:

büert AND NOT 3454jhadf üasdfsdf OR technüology AND (bar OR bas)

我想匹配除单词之外的所有单词特殊字符和数字AND, OR and NOT.

我试过的是这个

/(?!AND|OR|NOT)\b[\u00C0-\u017F\w\d]+/gi
这导致
["büert", "3454jhadf", "asdfsdf", "technüology", "bar", "bas"]

但这与ü或单词开头或结尾的 a-z 字母表之外的任何其他字母,因为\b词边界。

删除\b奇怪的是最终匹配的部分或我想排除的单词:

/(?!AND|OR|NOT)[\u00C0-\u017F\w\d]+/gi
结果是
["büert", "ND", "OT", "3454jhadf", "üasdfsdf", "R", "technüology", "ND", "bar", "R", "bas"]

除了我想要排除的字符之外,匹配所有单词的正确方法是什么,无论它们包含什么类型的字符?


这里的问题根源在于\b (and \w和其他简写类)在 JavaScript 中不支持 Unicode。

现在,有两种方法可以实现您想要的。

1. 用您想要丢弃的模式进行拆分

var re = /\s*\b(?:AND|OR|NOT)\b\s*|[()]/;
var s = "büert AND NOT 3454jhadf üasdfsdf OR technüology AND (bar OR bas)";
var res = s.split(re).filter(Boolean);
document.body.innerHTML += JSON.stringify(res, 0, 4);
// = > [ "büert", "3454jhadf üasdfsdf", "technüology", "bar", "bas" ]

注意非捕获组的使用(?:...)以免将不需要的单词包含到结果数组中。此外,您还需要将所有标点符号和其他不需要的字符添加到字符类中。

2. 使用自定义边界进行匹配

您可以在正则表达式中使用带有锚点/反向否定字符类的分组,如下所示:

(^|[^\u00C0-\u017F\w])(?!(?:AND|OR|NOT)(?=[^\u00C0-\u017F\w]|$))([\u00C0-\u017F\w]+)(?=[^\u00C0-\u017F\w]|$)

捕获组 2 将保存您需要的值。

See 正则表达式演示

JS代码演示:

var re = /(^|[^\u00C0-\u017F\w])(?!(?:AND|OR|NOT)(?=[^\u00C0-\u017F\w]|$))([\u00C0-\u017F\w]+)(?=[^\u00C0-\u017F\w]|$)/gi; 
var str = 'büert AND NOT 3454jhadf üasdfsdf OR technüology AND (bar OR bas)';
var m;
var arr = []; 
while ((m = re.exec(str)) !== null) {
  arr.push(m[2]);
}
document.body.innerHTML += JSON.stringify(arr);

或者使用块来动态构建正则表达式:

var bndry = "[^\\u00C0-\\u017F\\w]";
var re = RegExp("(^|" + bndry + ")" +                   // starting boundary
           "(?!(?:AND|OR|NOT)(?=" + bndry + "|$))" +    // restriction
           "([\\u00C0-\\u017F\\w]+)" +                  // match and capture our string
           "(?=" + bndry + "|$)"                        // set trailing boundary
           , "g"); 
var str = 'büert AND NOT 3454jhadf üasdfsdf OR technüology AND (bar OR bas)';
var m, arr = []; 
while ((m = re.exec(str)) !== null) {
  arr.push(m[2]);
}
document.body.innerHTML += JSON.stringify(arr);

解释:

  • (^|[^\u00C0-\u017F\w])- 我们的自定义边界(匹配以^或任何超出范围的字符[\u00C0-\u017F\w] range)
  • (?!(?:AND|OR|NOT)(?=[^\u00C0-\u017F\w]|$))- 比赛限制:有以下情况则比赛失败AND or OR or NOT后跟字符串结尾或除其中的字符之外的字符\u00C0-\u017F范围或非单词字符
  • ([\u00C0-\u017F\w]+)- 匹配单词字符([a-zA-Z0-9_])或来自\u00C0-\u017F range
  • (?=[^\u00C0-\u017F\w]|$)- 尾随边界,任一字符串末端($) 或除其中的字符之外的字符\u00C0-\u017F范围或非单词字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式匹配除 AND、OR 和 NOT 之外的所有单词 的相关文章

  • 关闭选项卡时要求确认[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我在某些浏览器上关闭页面时 我希望出现一个消息框 并询问我是否真的要关闭页面 有两个按钮 如果我单击No那么这个标签就不会被关闭 我怎样
  • React js Stripe 结账不起作用

    我正在尝试在 React js 应用程序中呈现条带结账默认表单
  • 在 Python 中解析 TCL 列表

    我需要在双括号上拆分以空格分隔的 TCL 列表 例如 OUTPUT 172 25 50 10 01 01 Ethernet 172 25 50 10 01 02 Ethernet Traffic Item 1 172 25 50 10 01
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • 正则表达式匹配bash变量

    我正在尝试修改 bash 脚本 当前脚本包含 print div class 1 div Where 1可能看起来像 Apprentice Historian Level 1 Historian Level 4 Master Histori
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • Google App Engine:修改云运行环境

    我正在尝试部署一个使用自定义 Node js 服务器的 Next js 应用程序 我想将自定义构建变量注入应用程序 next config js const NODE ENV process env NODE ENV const envTy
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中

随机推荐

  • Python pandas dataframe“Date”索引xlsx和csv中的不同格式

    我有一个包含多个选项卡的 xlsx 文件 每个选项卡都有一个Date列的格式为MM DD YYYY 将每个选项卡读入 pandas 数据帧 对每个选项卡应用一些操作 然后将数据帧写回两种格式 xlsx 和 csv 在 xlsx 文件中 Da
  • Ajax解析json字符串返回未定义,

    我正在发送一个帖子数据以获取 json 字符串 我的 JSON 字符串 error false success Added Website website id 12 我的阿贾克斯请求 publsher add website on sub
  • Flask 响应 - TypeError:“NoneType”对象不可调用 [重复]

    这个问题在这里已经有答案了 我正在尝试为 Flask REST 服务器创建一个 pytest 在其中一项测试中 我想获得服务器的响应 这是服务器的响应 return make response json dumps myName userN
  • 计算时间差并仅返回小时和分钟(在VB.net中)

    我正在开发一个计算时差的系统 如何比较两个时间 带日期 并获取差异的小时和分钟 示例1 datetime1 1 Apr 2014 01 05 04 AM datetime2 1 Apr 2014 02 05 04 AM 结果将是 datet
  • 如何将 numpy.savetxt 与包含数组的结构化数组一起使用

    假设我有一个结构化数组 如下所示 a np zeros 10 dtype label1 np int32 4 label2 np float 我尝试将其另存为 csv 文件 np savetxt output csv a fmt d d d
  • 使用scale_fill_gradientn将特定颜色分配给条形图中的确定值

    我有一个巨大的数据集 其中包含 20 名患者的一些参数的每分钟记录 通过可视化患者监测记录 IP 参数 我试图构建彩色条形图 所以我用了scale fill gradient r 中的函数 问题是 我想为一个确定的值 例如 IP 20 分配
  • 将新的 AcroForm 字段添加到 PDF

    我使用 iText 将数据填充到 PDF 中现有的 AcroForm 字段中 我现在正在寻找一种将新的 AcroForm 字段添加到 PDF 的解决方案 iText 可以做到这一点吗 如果是这样 我该怎么做 这记录在官方文档 更具体地说 在
  • 在 Yii2 中启用干净的 URL

    如何在 Yii2 中启用干净的 url 我想删除index php 和 来自 url 参数 为此需要在 Yii2 中编辑哪一部分 我在 yii2 中运行成功了 使能够mod rewrite for Apache For basic temp
  • 查找 MySQL 表中 EMPTY 或 NULL 列的计数

    我的 MySQL 表中有大约 30 列 我想计算特定行有多少列字段为空 该表用于存储用户信息 我想找出有多少个人资料字段 例如 姓名 年龄 位置 所有这些字段都存储在单独的列中 为空 尚未由用户填写 我想要细化的列是最后 20 列 因为前
  • VSCode / Virtual Studio Code:无法在 VSCode 终端中加载 Conda 环境

    我正在尝试切换到 VScode 使用内置终端与 Anaconda 交互 并且知道 VScode 支持 Anaconda 因为它随 Anaconda 一起提供 从文档和各种教程 视频中 我看到 conda 虚拟环境被识别 似乎是原生的 但我似
  • 使用内容脚本获取选项卡的 DOM

    我的 popup html 中有一个脚本 我试图通过它获取特定选项卡的 DOM 更具体地说 我试图确定当前页面上特定选项卡中是否存在特定元素 然后在 popup js 中使用此信息 我该怎么做呢 您无法从弹出窗口访问当前页面 DOM 为此
  • 在 Sphinx 中避免来自父级的文档字符串

    我使用 Sphinx 进行自动文档 但我发现它默认将父类文档字符串附加到我的文档字符串的方式很烦人 结果是 对于每个继承自的记录测试类unittest TestCase 我得到了文档字符串 创建一个类的实例 该实例在执行时将使用指定的测试方
  • 可以对故事板发表评论吗?

    因此 我一直在使用 Xcode 7 的新功能在故事板中引用故事板 为了使我的参考资料更加清晰 我想添加一些评论 以准确解释为什么我要拆分故事板 这个功能存在吗 我知道我可以创建一些虚拟视图 但我觉得这很懒而且效率有点低 In you 身份检
  • 在 struts 2 中的同一个操作方法中使用多个结果类型?

    我在操作方法中使用了结果类型流 该方法依赖于 ajax 调用 当焦点移出我的 JSP 上的文本字段时 会激活此 ajax 调用 此 AJAX 调用的功能是 如果用户输入的数据已存在于后端服务器中 则显示错误 基本上 服务器返回一个状态代码
  • 如何使用 C# 监控进程的 IO 活动?

    使用 FileSystemWatcher 我们可以监视特定文件系统的 IO 活动 但是是否有办法知道哪个正在运行的进程导致了该 IO 更具体地说 假设一个正在运行的进程即 abc exe 正在驱动器 D 上创建文件 text txt 我们可
  • 将数字格式化为始终具有符号和小数点分隔符[重复]

    这个问题在这里已经有答案了 我想将任何数字 整数或实数 格式化为字符串表示形式always has a sign 正或负 和小数点分隔符 但没有尾随零 一些样本 3 14 gt 3 14 12 00 gt 12 78 4 gt 78 4 3
  • 这里 Maps Android SDK 调用 PositioningManager start 方法返回 false

    我读了这个问题并尝试了它的答案 但它对我不起作用 我做了一个非常简单的测试应用程序 清单如下
  • laravel 新命令与旧版本

    当我尝试使用以下命令创建新的 Laravel 项目时 laravel new 5 2 blog laravel new blog 5 2 给我以下错误 Crafting application GuzzleHttp Exception Cl
  • NHibernate:仅加载基类对象

    欢迎任何形式的帮助 即使您可以说 根据您的经验 对于如此庞大的层次结构使用 ORM 是疯狂的 背景我的模型层有一个相当庞大的类层次结构 即大约有 200 个类 层次结构的好处 坏处是它们都具有相同的基类 基类和叶类之间的最大距离为 7 层次
  • 正则表达式匹配除 AND、OR 和 NOT 之外的所有单词

    在我的 javascript 应用程序中 我有这个随机字符串 b ert AND NOT 3454jhadf asdfsdf OR techn ology AND bar OR bas 我想匹配除单词之外的所有单词特殊字符和数字AND OR