正则表达式匹配空间不以 char 开头/结尾
Posted
技术标签:
【中文标题】正则表达式匹配空间不以 char 开头/结尾【英文标题】:RegEx matching space not starting/ending with char 【发布时间】:2015-07-20 14:45:41 【问题描述】:我需要将文本拆分为单词,但我还需要忽略 & 字符。这意味着例如“h & m”这个词已经在一起了。正则表达式也必须在 javascript 和 node.js 中工作。
我使用了/(?!&)\s(?!&)/g
。但这会忽略仅在末尾带有 & 字符的空格。
【问题讨论】:
【参考方案1】:如果不能拆分(因为JS中没有look-behind所以不能拆分),需要匹配:
\S+(?:\s&\s\S+)*
见demo
代码:
var re = /(\S+(?:\s&\s\S+)*)/g;
var str = 'H & M shopping mall';
var m = str.match(re);
document.getElementById("res").innerhtml = m;
<div id="res"/>
【讨论】:
此正则表达式将允许多个word & word & word...
,如果您想将其限制为仅两个字,请将*
替换为?
:var re = /\S+(?:\s&\s\S+)?/g;
。并且如果单词之间可能有多个空格,也可以在\s
之后使用+
:var re = /\S+(?:\s+&\s+\S+)*/g;
【参考方案2】:
您可以使用向前看和向后看...(只需将<
添加到您当前的正则表达式中)
/(?<!&)\s(?!&)/g
^
见DEMO
解释:
前一个字符不是&
..(?<!&)
且下一个字符也不是&
..(?!&)
的所有空格
【讨论】:
谢谢。不幸的是,JS 不支持 Lookbehinds,所以我不能在 node.js 应用程序中使用它。/(?<!&)\s(?!&)/g
显然是 JavaScript 文字符号正则表达式,并且针对 PCRE 库执行测试。所以,测试通过了,但不是 JS:regex101.com/r/yW8bG7/2
@stribizhev..你是对的..也是故意的,因为在发布答案之前问题没有任何 JS 标签..这就是我假设 PCRE 的原因:)以上是关于正则表达式匹配空间不以 char 开头/结尾的主要内容,如果未能解决你的问题,请参考以下文章