正则表达式匹配空间不以 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

解释:

前一个字符不是&amp;..(?&lt;!&amp;)且下一个字符也不是&amp;..(?!&amp;)的所有空格

【讨论】:

谢谢。不幸的是,JS 不支持 Lookbehinds,所以我不能在 node.js 应用程序中使用它。 /(?&lt;!&amp;)\s(?!&amp;)/g 显然是 JavaScript 文字符号正则表达式,并且针对 PCRE 库执行测试。所以,测试通过了,但不是 JS:regex101.com/r/yW8bG7/2 @stribizhev..你是对的..也是故意的,因为在发布答案之前问题没有任何 JS 标签..这就是我假设 PCRE 的原因:)

以上是关于正则表达式匹配空间不以 char 开头/结尾的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 以特定字符串开头但不以另一个子字符串结尾

正则表达式中以啥开头啥结尾怎么写

不以元音开头或结尾的单词的正则表达式?

正则表达式:数字开头中间字母结尾数字

js正则表达式过滤以指定字符开头以指定字符结尾的文本内容

正则表达式匹配不是特定子字符串的内容