匹配所有字符直到字边界

时间:2015-04-21 17:02:54

标签: javascript regex

基于Regex Until But Not Including,我试图将所有字符匹配到字边界。

例如 - 在以下字符串中匹配apple

apple<

我正在使用:

像这样:

/a[^\b]+/

哪个应该查找“a”,然后为任何不是单词边界的字符抓取一个或多个匹配项。所以我希望它会在<之前停止,而var input = [ "apple<", "apple/" ]; var myRegex = /a[^\b]+/; for (var i = 0; i < input.length; i++) { console.log(myRegex.exec(input[i])); }位于单词

的末尾

Demo in Regexr

StackSnippets中的演示

/a[\B]+/

我尝试了其他正则表达式字符串:

我可以使用否定的单词边界或带有常规单词边界的否定集合:

  • /a[^\b]+/
  • /a[^|"<>\-\\\/;:,.]+/

我可以指定几个可能的单词结束字符,并在否定集中使用它们:

  • /a[\w]+/

我也可以寻找一个正面的集合,并限制它返回常规字母:

  • /a[a-zA-Z]+/
  • {{1}}

但是如果可能的话,我想知道如何为字边界做这件事。

这是MDN's listing of word boundarycharacters that it constitutes

3 个答案:

答案 0 :(得分:6)

字边界(\b)不是字符,而是一系列字母和任何非字母字符之间的空字符串。此外,由于JavaScript中仍然缺少Unicode支持,“字母”仅表示ASCII字母。

因此,你

  • 除非您的数据是某种不可能包含Unicode的计算机语言,否则通常不应使用\b
  • 无法将量词应用于\b(空字符串乘以10仍然是一个空字符串)
  • 不能否定\b(它不是字符集,所以它没有补充)
  • 不能在字符集中包含\b(在方括号中),因为它不是字符或字符集

由于\b实际上没有为匹配添加任何字符,因此您可以安全地将其附加到正则表达式中:

/.+?\b/

将匹配所有字符直到第一个单词边界。它实际上是:

的超集
/\w+/

这可能是你想要的,因为你只对单词感兴趣,而不是介于两者之间的东西。

答案 1 :(得分:1)

您必须将单词边界作为正则表达式的一部分包括在内:

/[A-Za-z]+\b/

<强> Working demo

你也可以使用:

\w+\b

虽然这会将下划线作为单词的一部分

答案 2 :(得分:1)

如果问题的这一重写是准确的:匹配所有以&#39; a&#39; 开头的单词,那么您可能已经开始使用现有的SO答案进行搜索{{3} }。向下提取你可以使用单词\w的字符类,并通过包含前面的单词边界\b匹配使其更加防弹,以防止匹配包含&#39; a&#的部分单词39;例如&#39;行李&#39;:/\ba\w+/gi

&#13;
&#13;
var input = [ "apple<", "apple/", "baggage;" ];
var myRegexWord = /\ba\w+/i;
var myRegexPartial = /a\w+/;

for (var i = 0; i < input.length; i++) {
  console.log(myRegexWord.exec(input[i]));  
  console.log(myRegexPartial.exec(input[i]));  
}
&#13;
&#13;
&#13;