javascript - 无法让 RegExp 在 GWT 中匹配

标签 javascript regex gwt negative-lookbehind

示例文本: 公园里, children 在玩耍。 child 个子很高。 child 看着另一个 child 玩耍。

我想在第一句中匹配“child”,在第二句和第三句中匹配“Child”,但在第三句中不匹配“child”。或者换句话说,匹配“Child”或“child”,但如果后面有“another”一词,则不匹配

我想我可以使用负向后看来做到这一点

 ((?<\!another) [Cc]hild)

但似乎无法获得正确的语法来生成有效的正则表达式。

即使我能得到正确的语法,我也不确定我能在 GWT 中做到这一点。以下是 GWT Javadoc 的片段

Java-specific constructs in the regular expression syntax (e.g. [a-z&&[^bc]], (?<=foo), \A, \Q) work only in the pure Java implementation, not the GWT implementation,...

任何帮助或见解将不胜感激。

更新:

科林的答案几乎有效,但并不完全正确。

科林的正则表达式确实匹配“Child”和“child”,而不像我问的那样匹配“另一个 child ”。但还是存在一些问题。

我想做的是匹配“Child”和“child”,这样它们就可以替换为 child 的名字或正确的代词他/她,具体取决于 child 的性别。

Colin 正则表达式的问题在于它匹配“,child”和“.Child”。如果“Child”是文本中的第一个单词,则它也不匹配。例如:

“ child 去了公园。在公园里, child 玩耍。 child 很高。 child 看着另一个 child 玩耍。”

第一个子项不匹配。随后的匹配位于“,child”、“.Child”和“.Child”。

我研究了 Colin 提出的正则表达式,试图让它只匹配“child”或“Child”,但无法使其工作。

最佳答案

GWT 中的正则表达式与 JavaScript RegExp 具有相同级别的支持,因为它只是 calls on to the native JavaScript classes .

考虑到 JavaScript 正则表达式不支持后视或所有格量词,我想不出直接在正则表达式中拒绝“另一个 child ”的方法。

因此,我会写一个正则表达式,这样,如果“another”出现在“child”之前,那么“another”肯定会被匹配;否则,只会匹配“child”。然后,您可以过滤掉超过 5 个字符的匹配项。

RegExp.compile("(?:another +)?[Cc]hild", "g")

请注意,字符串“somechildren”中的“child”也将被匹配。而如果“another”嵌入到一个较长的字符串中,例如“ranother”1,那么我们就会盲目地选取该片段。为了防止这种情况,我们需要添加字边界检查\b2:

RegExp.compile("(?:\\banother +)?\\b[Cc]hild\\b", "g")
                   ---           ---        ---
                    |             |          |
            prevent "ranother"  prevent "children"
              from matching        or "nochild"
                                  from matching

您还可以允许使用 i 标志进行不区分大小写的匹配(这对于文本来说非常合理)。不过,我会让你决定。

使用上面的正则表达式,我们将始终在匹配“child”之前匹配“another child”。因此,当匹配仅包含“child”时,我们知道“another”位于它之前。因此,我们可以过滤掉长度> 5的匹配项,只留下有效的字符串。

脚注

  1. 我用一个合成词作为例子。任意字符串都是正常的,但不知道英文里有没有嵌入“another”的单词。

  2. 这里有一个警告。使用 \b 时,“child4”或“child_something”将不匹配。而“_another child”或“5another child”中的“another”将不会被正则表达式选取(并且只有“child”被匹配,这意味着您接受匹配)。可以解决这个问题,如果您要求,我会这样做。

关于javascript - 无法让 RegExp 在 GWT 中匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14904984/

相关文章:

javascript - 轴刻度标记

javascript - 离开div后,嵌入式YouTube视频将不会停止播放

javascript - 如何比较数组中的日期以找到最早的日期?

java - 不允许将 GWT addValueChangeHandler 添加到 RichTextBox,需要另一种方法

java - Java GWT中如何拦截KeyPressEvent?

javascript - 元素隐式具有 'any' 类型,因为索引表达式不是 'number' 类型 [7015]

java - 编写正则表达式 java 的麻烦

regex - 我如何使这个正则表达式 URL 模式在 Django 2 中工作

JavaScript 正则表达式 [url=$1]$2[/url] 问题

java - 如何在gwt的框架中显示一个html页面