匹配所有字符直到字边界

Kyl*_*Mit 1 javascript regex

基于Regex直到但不包括,我试图匹配所有字符直到字边界.

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

apple<
Run Code Online (Sandbox Code Playgroud)

我正在使用:

像这样:

/a[^\b]+/
Run Code Online (Sandbox Code Playgroud)

哪个应该查找"a",然后为任何不是单词边界的字符抓取一个或多个匹配项.所以我希望它在<此之前停止

Regexr演示

StackSnippets中的演示

var input = [ "apple<", "apple/" ];
var myRegex = /a[^\b]+/;

for (var i = 0; i < input.length; i++) {
  console.log(myRegex.exec(input[i]));  
}
Run Code Online (Sandbox Code Playgroud)

我试过的其他正则表达式字符串:

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

  • /a[\B]+/
  • /a[^\b]+/

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

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

我也可以寻找一个积极的设置,并限制它返回常规字母:

  • /a[\w]+/
  • /a[a-zA-Z]+/

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

这是MDN的单词边界列表及其构成字符

Tou*_*ffy 6

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

因此,你

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

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

/.+?\b/
Run Code Online (Sandbox Code Playgroud)

将匹配所有字符直到第一个单词边界.它实际上是以下的超集:

/\w+/
Run Code Online (Sandbox Code Playgroud)

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