- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我正在使用 JavaScript 应用程序,需要帮助来解决这个正则表达式
我有一系列字符串。它们是动态的,但确实有固定的模式。
name eq 'abc'
id in 'def'
key | operator | value
然后我有一个修饰符“has”
has name eq 'abc'
!has id
has address eq '123 sesame street'
|modifier | key | operator | value
我能够使用这个正则表达式提取修饰符和键,没有问题
new RegExp(/(^(\s*!?has\s+)?([^\s]+)|(^\s*[^\s]+))/i)
但是当我有一个与修饰符相同的键时就会出现问题
has eq '123'
上面的正则表达式返回“has eq”,而我只需要“has”
has has eq '123'
上面正确返回“has has”
有大量的运算符需要处理,但它们是一个设定值
如有任何帮助,我们将不胜感激
最佳答案
您需要具体并完全指定所有有效语法:
var keyval = ''
keyval += "^\s*(\w+)\s+eq\s+'(.*)'$"; // for key eq 'val'
keyval += "|^\s*has\s(\w+)\s+eq\s+'(.*)'$"; // for has key eq 'val'
new RegExp(keyval, 'i');
我不确定您是否需要没有值的 has var
和 !has var
行,如果需要,您可以添加:
keyval += "|^\s*!?has\s+(\w+)$"; // for has key and !has key
请注意,正则表达式的主要问题是无法识别 eq
是一个重要的关键字。
附加说明:
就我个人而言,我不会为此使用一个正则表达式。这样做会使正则表达式变得又长又复杂,并且还会使提取匹配变得困难。您可以使用上面的技巧来分解长正则表达式,但在我看来,最好使用许多较小的正则表达式。我会写如下内容:
var key_equal_pattern = /^\s*(\w+)\s+eq\s+'(.*)'$/i;
var has_key_equal_pattern = /^\s*has\s(\w+)\s+eq\s+'(.*)'$/i;
var has_patten = /^\s*!?has\s+(\w+)$/i;
if ((m = input.match(key_equal_pattern)) !== null) {
// handle match
}
else if ((m = input.match(has_key_equal_pattern)) !== null) {
// handle match
}
else if ((m = input.match(has_patten)) !== null) {
// handle match
}
与巨大的正则表达式相比,这更易于维护。请注意,虽然俗话说你不能用正则表达式解析像 html 这样的东西,但人们真正想说的是你不能在单个正则表达式中做到这一点。几乎所有 html 解析器在标记化过程中都使用正则表达式,然后使用 if
和 for
循环来处理数据的结构。
关于Javascript正则表达式难倒了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839661/
我正在开始学习 Javascript,但对我的第一个函数感到困惑。为了我自己的缘故拼写出来,这是我试图实现的目标: 声明变量:color和primary 设置颜色等于id“color”并抓取输入值 根
关于选取框效果,我已经尝试过无数种解决方案,但我完全被难住了。我也尝试了一些 webkit 示例,但他的演示不起作用。我主要使用 Chrome,但我的网站必须同时在 Chrome 和 Firefox
我正在为 Javascript 编写一个绘图/图形库,遇到了一个看起来很严重的问题。 我有 4 个数字输入用于定义图形将显示的最小值和最大值,很像 TI-84 图形计算器:XMin、XMax、YMin
我目前正在尝试编写一个小程序来测试 udp 套接字程序的较小功能。这部分代码打开一个文件,将文件的内容存储到缓冲区中,然后将缓冲区的每 1024 字节写入另一个缓冲区的一部分(将在 udp 应用程序中
我正在参加 C++ 初学者的远程类(class),但无法解决此编译错误。它的编写与示例书中的完全相同,当我的兄弟将其剪切并粘贴到他的 VS2015 中时,它工作正常,但在我的 VS2017 中却没有。
在我的 Rails 4.2.6/Ruby 2.2.4 应用程序中,我有一个生成字符串的数据库查询方法;例如: "Chest - pectoralis, Quads - quadriceps, Hams
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
在 C++ 中,我想使用 Unicode 来做事。因此,在掉进 Unicode 的兔子洞之后,我最终陷入了困惑、头痛和语言环境的火车残骸中。 但在 Boost 中,我遇到了一个不幸的问题,即尝试使用
这方面的文献很糟糕——我只想从我定义但在代理 Controller 类中动态创建(希望这不会导致问题)的控件中冒出一个事件。该控件是一个 PopUp。 public static readonly R
我被难住了。尝试使用 NSURLConnection 发布到 php 脚本。整个下午都在做这个,所以我想是时候寻求帮助了。我已经阅读了@NSURLConnection 上的很多帖子,但我仍然没有弄清楚
首先,我是一个 java 新手。我一直在寻找一种不涉及列表或哈希表的简洁方法来解决这个问题,但还没有找到: **请注意,这不是家庭作业,而是“构建 Java 程序”第 7 章中的练习 #14 编写一个
与我合作的 vendor 最近为我的公司制作了一个页面。它通常运行良好,但在用 IE(任何版本)查看时会出现错误。 错误详情如下: User Agent: Mozilla/4.0 (compatibl
我是一名优秀的程序员,十分优秀!