不在某些字符之间的所有单词的Javascript正则表达式

不在某些字符之间的所有单词的Javascript正则表达式,javascript,regex,Javascript,Regex,我正在尝试返回不在方括号内的所有单词的计数。如此给定 [don't match these words] but do match these 最后四个字我数到4 这在.net中起作用: \b(?<!\[)[\w']+(?!\])\b \b(?我会使用类似于\[^\]*\]的方法删除方括号中的单词,然后按空格分解返回的字符串以计算剩余的单词。我会使用类似于\[^\]]*\]删除方括号中的单词,然后按空格分解返回的字符串以计算剩余的单词。好的,我认为这应该可以: \[[^\]]+\](?

我正在尝试返回不在方括号内的所有单词的计数。如此给定

[don't match these words] but do match these
最后四个字我数到4

这在.net中起作用:

\b(?<!\[)[\w']+(?!\])\b

\b(?我会使用类似于
\[^\]*\]
的方法删除方括号中的单词,然后按空格分解返回的字符串以计算剩余的单词。

我会使用类似于
\[^\]]*\]
删除方括号中的单词,然后按空格分解返回的字符串以计算剩余的单词。

好的,我认为这应该可以:

\[[^\]]+\](?:^|\s)([\w']+)(?!\])\b|(?:^|\s)([\w']+)(?!\])\b
您可以在此处进行测试:

如果您需要在正文后面加上方括号中的文本的备选方案,可以将其作为第二个备选方案添加,当前的第二个备选方案将变为第三个。
这有点复杂,但我现在想不出更好的解决办法

如果您需要对实际匹配进行处理,您将在捕获组中找到它们

更新:

说明: 因此,我们有两个选择:

  • \[^\]+\](?:^\s)([\w']+(?!\])\b
  • 这是说:

    • \[^\]+\]
      -匹配方括号中的所有内容(不捕获)
    • (?:^ |\s)
      -后跟行开始或空格-当我现在看到它时,请将插入符号去掉,因为它没有意义,因此这将变成
      \s
    • ([\w']+)
      -匹配以下所有单词字符,只要
      (?!\])
      下一个字符不是右括号-这可能现在也不需要了,所以让我们尝试删除前向
    • \b
      -并匹配单词边界
    2
    (?:^\s)([\w']+)(?!\])\b

    如果您找不到选项1-只进行单词匹配,而不查找方括号,因为我们在第一部分中确保它们不在这里

    好的,所以我删除了所有我们不需要的东西(它们留在那里,因为我在它工作之前尝试了很多选项:-),修改后的正则表达式如下所示:

    \[[^\]]+\]\s([\w']+)(?!\])\b|(?:^|\s)([\w']+)\b
    

    好的,我认为这应该有效:

    \[[^\]]+\](?:^|\s)([\w']+)(?!\])\b|(?:^|\s)([\w']+)(?!\])\b
    
    您可以在此处进行测试:

    如果您需要在正文后面加上方括号中的文本的备选方案,可以将其作为第二个备选方案添加,当前的第二个备选方案将变为第三个。
    这有点复杂,但我现在想不出更好的解决办法

    如果您需要对实际匹配进行处理,您将在捕获组中找到它们

    更新:

    说明: 因此,我们有两个选择:

  • \[^\]+\](?:^\s)([\w']+(?!\])\b
  • 这是说:

    • \[^\]+\]
      -匹配方括号中的所有内容(不捕获)
    • (?:^ |\s)
      -后跟行开始或空格-当我现在看到它时,请将插入符号去掉,因为它没有意义,因此这将变成
      \s
    • ([\w']+)
      -匹配以下所有单词字符,只要
      (?!\])
      下一个字符不是右括号-这可能现在也不需要了,所以让我们尝试删除前向
    • \b
      -并匹配单词边界
    2
    (?:^\s)([\w']+)(?!\])\b

    如果您找不到选项1-只进行单词匹配,而不查找方括号,因为我们在第一部分中确保它们不在这里

    好的,所以我删除了所有我们不需要的东西(它们留在那里,因为我在它工作之前尝试了很多选项:-),修改后的正则表达式如下所示:

    \[[^\]]+\]\s([\w']+)(?!\])\b|(?:^|\s)([\w']+)\b
    

    Chris,重新提出这个问题,因为它有一个简单的解决方案,但没有提到。(在对有关的一般问题进行研究时发现了您的问题。)

    下面是我们的简单正则表达式(请在工作时查看,查看右下面板中的组捕获):

    交替的左侧匹配完整的
    [括号内的组]
    。我们将忽略这些匹配。右侧匹配并捕获组1中的单词,我们知道它们是正确的单词,因为它们与左侧的表达式不匹配

    此程序显示如何使用正则表达式(请参阅中的计数结果):

    
    var subject='[不要匹配这些单词],但一定要匹配这些';
    var regex=/\[^\]*\]|(\b\w+\b)/g;
    var group1Caps=[];
    var match=regex.exec(主题);
    //将组1捕获放入数组中
    while(匹配!=null){
    如果(匹配[1]!=null)group1Caps.push(匹配[1]);
    match=regex.exec(主题);
    }
    文档。写入(“
    ***匹配数***
    ”; 文件写入(分组1卷长度);
    参考


    克里斯,重新提出这个问题,因为它有一个简单的解决方案,但没有提到。(在对一个关于的一般问题进行研究时发现了你的问题。)

    下面是我们的简单正则表达式(请在工作时查看,查看右下面板中的组捕获):

    交替的左侧匹配完整的
    [括号内的组]
    。我们将忽略这些匹配。右侧匹配并捕获组1中的单词,我们知道它们是正确的单词,因为它们与左侧的表达式不匹配

    此程序显示如何使用正则表达式(请参阅中的计数结果):

    
    var subject='[不要匹配这些单词],但一定要匹配这些';
    var regex=/\[^\]*\]|(\b\w+\b)/g;
    var group1Caps=[];
    var match=regex.exec(主题);
    //将组1捕获放入数组中
    while(匹配!=null){
    如果(匹配[1]!=null)group1Caps.push(匹配[1]);
    match=regex.exec(主题);
    }
    文档。写入(“
    ***匹配数***
    ”; 文件写入(分组1卷长度);
    参考


    我正在寻找一个理想的正则表达式,它可以一蹴而就。我已经有了一个两步解决方案,但我正在寻找效率,因为每次有人在txtb中键入时,它都会运行