问题标签 [alternation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1080 浏览

regex - 正则表达式表现得很懒惰,应该是贪婪的

我认为默认情况下我的正则表达式会表现出我想要的贪婪行为,但它不在以下代码中:

输出:

现在我意识到,如果我只是按长度降序对关键字进行排序,我可以让它适用于这个小例子,但是

  • 我想了解为什么这不能按预期工作,并且
  • 我正在处理的实际项目在正则表达式中有更多的单词,并且保持它们按字母顺序排列很重要。

所以我的问题是:为什么这是懒惰的,我该如何解决?

0 投票
6 回答
51399 浏览

android - 如何更改 Android 上选项菜单上的 MenuItem?

我有一个带有“开始”的选项Activity菜单MenuItem。选择此MenuItem选项后,我想更改菜单,使其包含MenuItem“停止”。And finally when "Stop" is selected, I would like to alter back to "Start".

这是我的部分代码不起作用。我列出了“开始”和“停止”,mymenu.xml我应该在创建菜单时删除“停止”:

0 投票
2 回答
299 浏览

regex - 可以重写包含有序交替的正则表达式以仅使用无序交替吗?

假设我有一种正则表达式语言,支持文字、正负字符类、有序交替、贪婪量词?*+,以及非贪婪量词??*?+?。(这本质上是 PCRE 的一个子集,没有反向引用、环视断言或其他一些更高级的位。)用无序交替替换有序交替会降低这种形式主义的表达能力吗?

(无序交替——有时也称为“无序选择”——满足 L(S|T) = L(S) + L(T),而有序交替满足 L(S|T) = L (S) + (L(T) - { a in L(T) : a extends some b in L(S) }). 具体来说,如果交替是无序的,模式a|aa将匹配字符串aaa但前提a是交替已订购。)

换句话说,给定一个包含有序交替的模式 S,该模式是否可以重写为不包含有序交替(但可能是无序交替)的等效模式 T?

如果文献中已经考虑过这个问题,我将不胜感激任何人都可以提供的任何参考资料。我几乎没有找到关于扩展正则表达式形式的表达能力的理论工作(除了关于反向引用如何将你从常规语言转移到无上下文语法的常见事情之外)。

0 投票
4 回答
364 浏览

php - 如何确定正则表达式的优先级 | (OR) 表达式?

0 投票
2 回答
707 浏览

javascript - 使用 2 个元素的 Jquery 切换

这是我的脚本,我正在使用切换,所以我可以为滑动菜单设置动画。

虽然我真的需要切换来使用页面上的 2 个元素。例如见下文...

我需要它,如果首先单击元素一个,则可以在第一次单击时使用元素二关闭菜单。现在发生的事情是您必须单击元素二两次才能关闭菜单 - 反之亦然

我想这是开始发挥作用的切换,任何帮助都会非常感谢。

干杯乔什

0 投票
1 回答
434 浏览

javascript - jQuery第二次点击交替不起作用?

http://jsfiddle.net/motocomdigital/uTV5k/18/

我已经使用切换而不是单击进行了更新-尽管仍然无法获得平滑的交替。

我在这里混合了javascript和jquery。

我正在尝试获取一个元素,因此当它被单击时,它会运行一个动画(打开)。在第二次单击时,动画运行到起点(关闭)。

但由于某种原因,我无法让第二次点击交替工作。谁能建议我做错了什么?谢谢

$('.home-module').toggle是我遇到的问题。

请参阅下面的脚本...

点击动画似乎真的没有反应,第二次点击/交替真的延迟并且做奇怪的事情?

谢谢


我的原始代码...

0 投票
2 回答
741 浏览

javascript - 点击运行两次

http://jsfiddle.net/uTV5k/19/

你好,

我在我的移动网站上使用以下脚本。请参阅模拟脚本和标记的 jsfiddle。

下面的脚本正是我的移动网站上的内容,js fiddle 是它的复制品。

在 jsfiddle 中,单击交替工作正常。第一次单击打开动画,第二次单击关闭动画。

我的移动网站上的问题,第一次点击打开动画,第二次动画在没有第二次点击后立即运行。但在小提琴中它运行正常。




我真的不确定为什么会发生这种情况。在 iScroll 中使用它应该不会引起任何问题吗?

提前致谢

0 投票
1 回答
324 浏览

java - Java 正则表达式和交替的问题

我在让正则表达式工作时遇到了麻烦。我正在尝试为某些 XML 标记解析一个大的、多行的文本块。我不使用 XML 库来解析它的原因是它实际上也是 ESQL 块的一部分。我正在使用的线路如下:

我的问题实际上是两个方面:

  1. (Invoice|Package|Mapping|Post)部分仅与发票匹配,除非我从列表中删除发票。然后它只匹配映射。让我感到奇怪的是,Package 位于文本块的中间(这些块Invoice, Package, Mapping, Post在文本文件中排序,Post 是可选的,因此它甚至可能不存在)并且映射接近尾声。

  2. <(ESQL|ProcessInvoice)>部分实际上占用ProcessInvoice了块(最后一个块,最后三个<ESQL>块)。如果我移除该(ESQL|ProcessInvoice)部分并使其成为<ESQL>可能,奇怪的是,再次使用 Package 块,而不是 Invoice 的第一个块。这仍然是一个问题,即使我将其缩减为仅是之前的四个部分之一(所以,只是Invoice),并且在任何地方都没有交替。它将跳过第一部分并进入第二部分。

我承认我不是正则表达式大师,但这似乎是相当奇怪的行为。在 Matcher 上调用 .reset() 也不会使其识别更早的块,并且 .find() 仅定位一个匹配项,而不是遍历所有可能的匹配项。

---附录---示例输入如下(针对内容进行了编辑):

预期的分组应该(分别):

  1. 发票
  2. 包裹
  3. 映射

和数据:

  1. ESQL 块 1 ESQL 块 2
  2. ESQL 块 3
  3. 另一个 ESQL 块

我应该提到我现在稍微改变了我的正则表达式来解释,现在如下:

这种交替似乎现在适用于四个可能的部分中的三个,但我相信我之前的部分问题是试图<(ESQL|ProcessInvoice)>在另一个组内部使用。试图不做<Rule>(.+?)</Rule>.*?,而是做,甚至只是(<ESQL>.+?</ESQL>)不想现在工作。

0 投票
4 回答
333 浏览

regex - 正则表达式来测试输入是否是模式中的 ok 子字符串

基本上,如果我有一个像

我希望它成功

但后来失败了

我知道一些已经给出的答案,

或者

虽然它们确实有效,但对于这种特定情况,这不是我宁愿采用的方式,如果将其扩展到 20 个长字,它就会变得难以管理。如果可能的话,我希望有一个更优雅的解决方案。

有什么优雅的想法吗?在我使用它的地方,我可以,而不是正则表达式,传递一个字符串列表,然后检查任何字符串的输入索引是否为 0,但我只是想看看是否有一种方法可以用正则表达式来做。

感谢所有答案,但我主要是在寻找尽可能多的“优雅”解决方案,但在浏览完之后,我不确定是否有一个。

基本上,这是一种强制输入预防。我想要的类似于 Dojo 的 ValidationTextBox,http://dojotoolkit.org/reference-guide/1.7/dijit/form/ValidationTextBox.html。在那里,它会尽快告诉您输入是否与验证模式不匹配(我......可能最终会这样做),但我只想允许正确的输入及其路径.

换句话说,我试图找出是否有任何优雅的方法来查看您是否可以仅针对相同长度的模式检查输入字符串,例如,如果您只输入一个字符,它实际上只针对

在这种情况下,两个字符,

等等。

虽然我的具体答案是关于正则表达式的交替,但我很想知道一般的正则表达式(从我读过的内容来看,这似乎不太可能)。

我的意思是,如果你有,

我想要一种让所有人都能成功测试的方法

0 投票
2 回答
885 浏览

regex - 正则表达式在一个搜索词之后和其他两个搜索词之一之前收集数据(哪个是第一个)

我需要塑造一个具有以下要求的正则表达式:

给定示例文本:

我想提取出现在该find this text区域的字符串

SEARCH_TERM_#1正则表达式应该在upto之后收集数据,但不包括SEARCH_TERM_#2SEARCH-TERM_#3哪个先出现。无论在#2 和#3 中找到什么,它都应该选择作为“右侧”搜索边界。

我试过(?>SEARCH_TERM_#2|SEARCH_TERM_#3) (?=(?>SEARCH_TERM_#2|SEARCH_TERM_#3))(?>(?=SEARCH_TERM_#2)|(?=SEARCH_TERM_#3))。他们都将第二个搜索词包含在收集的数据中,并在第三个之前停止,而我希望收集的数据在 #2 或 #3 之前停止,哪个先出现。