我正在尝试返回不在方括号之间的所有单词的计数。所以给..
[don't match these words] but do match these
最后四个词我数到了 4。
这在 .net 中有效:
\b(?<!\[)[\w']+(?!\])\b
但它在 Javascript 中不起作用,因为它不支持lookbehind
对于纯 js 正则表达式解决方案有什么想法吗?
好的,我认为这应该有效:
\[[^\]]+\](?:^|\s)([\w']+)(?!\])\b|(?:^|\s)([\w']+)(?!\])\b
您可以在这里测试:
http://regexpal.com/ http://regexpal.com/
如果您需要在正文之后使用方括号中的文本作为替代文本,则可以将其添加为第二个替代文本,当前的第二个文本将成为第三个文本。
这有点复杂,但我现在想不出更好的解决方案。
如果您需要对实际匹配项执行某些操作,您可以在捕获组中找到它们。
UPDATE:
解释:
所以,我们这里有两个选择:
\[[^\]]+\](?:^|\s)([\w']+)(?!\])\b
这是说:
-
\[[^\]]+\]
- 匹配方括号中的所有内容(不捕获)
-
(?:^|\s)
- 后面是行开头或空格 - 当我现在查看它时,将插入符号去掉,因为它没有意义,所以这将变得只是\s
-
([\w']+)
- 匹配所有以下单词字符只要(?!\])
下一个字符不是右括号 - 好吧,现在这可能也是不必要的,所以让我们尝试删除前瞻
-
\b
- 并匹配单词边界
2 (?:^|\s)([\w']+)(?!\])\b
如果您找不到选项 1 - 只进行单词匹配,而不寻找方括号,因为我们在第一部分中确保它们不在这里。
好的,所以我删除了所有我们不需要的东西(它们留在那里,因为我在它起作用之前尝试了很多选项:-),修改后的正则表达式如下:
\[[^\]]+\]\s([\w']+)(?!\])\b|(?:^|\s)([\w']+)\b
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)