Javascript正则表达式适用于某些字符之间的所有单词

Chr*_*ebb 0 javascript regex

我试图返回方括号之间的所有单词的计数.所以......

[don't match these words] but do match these
Run Code Online (Sandbox Code Playgroud)

我在最后四个单词中得到4分.

这适用于.net:

\b(?<!\[)[\w']+(?!\])\b
Run Code Online (Sandbox Code Playgroud)

但它不适用于Javascript,因为它不支持lookbehind

纯js正则表达式解决方案的任何想法?

Joa*_*rks 5

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

\[[^\]]+\](?:^|\s)([\w']+)(?!\])\b|(?:^|\s)([\w']+)(?!\])\b
Run Code Online (Sandbox Code Playgroud)

你可以在这里测试一下:http:
//regexpal.com/

如果您需要在主文本后面加上方括号中带有文本的替代方法,则可以将其添加为第二个替代方案,当前的第二个方案将成为第三个替代方案.
这有点复杂,但我现在想不出更好的解决方案.

如果您需要对实际匹配执行某些操作,您将在捕获组中找到它们.

更新:

说明:所以,我们在这里有两个选择:

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

这是说:

  • \[[^\]]+\] - 匹配方括号中的所有内容(不捕获)
  • (?:^|\s) - 接下来是线路起点或空格 - 当我看到它时,现在把把它拿出来,因为它没有意义所以这将变成只是 \s
  • ([\w']+)- 只要(?!\])下一个字符不是结束括号,就匹配所有后面的单词字符- 现在这可能也是不必要的,所以让我们尝试删除前瞻
  • \b - 并匹配单词边界

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

如果你找不到选项1 - 只做单词匹配,而不是寻找方括号,因为我们确保第一部分它们不在这里.

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

\[[^\]]+\]\s([\w']+)(?!\])\b|(?:^|\s)([\w']+)\b
Run Code Online (Sandbox Code Playgroud)