当前位置: 首页 > 知识库问答 >
问题:

匹配所有字符直到一个单词边界

孙元明
2023-03-14

基于正则表达式直到但不包括,我试图匹配所有字符,直到一个单词边界。

例如,在以下字符串中匹配苹果

apple<

我正在使用:

  • 一个否定集[^]
  • 有字边界\b
  • 和一个加号中继器

这样地:

/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]));  
}

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

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

  • /a[\B]/

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

  • /a[^|”

我还可以查找一个positive set,并将其限制为返回普通字母:

  • /a[\w]/

但是如果可能的话,我想知道如何处理单词边界。

下面是MDN的单词边界列表及其组成的字符


共有3个答案

吴腾
2023-03-14

如果这个问题的改写是准确的:匹配所有以“a”开头的单词,那么您可能已经开始搜索现有的SO答案,比如这个。从中提取出来,你可以使用一个字符类来表示一个单词\w,并通过在前面添加一个单词边界\b匹配来防止匹配包含“a”的部分单词,例如“baggage”:/\ba\w/gi

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]));  
}
百里修真
2023-03-14

您必须将单词边界作为正则表达式的一部分,如下所示:

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

工作演示

您还可以使用:

\w+\b

尽管这将包括下划线作为单词的一部分

吴星汉
2023-03-14

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

正因为如此,你

  • 通常不应使用\b,除非您的数据是某种不可能包含Unicode的计算机语言

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

/.+?\b/

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

/\w+/

这可能是你想要的,因为你只对文字感兴趣,而不是中间的东西。

 类似资料:
  • 问题内容: 我正在查询以获取具有特定标题的文档的URI。我的查询是: 的值实际在哪里,因为查询字符串是通过以下方式生成的: 通过上面的查询,我仅获得标题与完全相同的文档。想象一下,是由多个词组成的。我想获得文档,即使文档标题上仅出现一个字形(例如)。我该怎么办? 问题答案: 假设您有一些数据(在Turtle中): 然后,您可以使用类似以下的查询: 得到像 这样做特别整洁的是,由于您正在动态生成模式

  • 我有这样一个字符串: 最终,我需要修改匹配的子字符串的每个实例,但我还需要修改和之前/之后的每个子字符串。 下面的正则表达式匹配a

  • 使用正则表达式匹配表达式 为什么这两个示例匹配如下(突出显示): c# < code>a #b #c #d 具体来说,为什么第一个字符串不匹配包含最后一个#之前的所有内容? 由于单词边界(\b)是零宽度匹配,可以在单词字符(\w)和非单词字符(\ w)之间匹配,或者在单词字符和字符串的开始或结束之间匹配,我不确定以非单词字符结束表达式会如何影响匹配。

  • 问题内容: 我想用php代替完整的单词 示例:如果我有 我用 新文本应如下所示 新hello1您好,Helloz PHP返回 NEW hello1 hello,NEWz 谢谢。 问题答案: 您要使用正则表达式。该单词边界匹配。 如果包含UTF-8文本,则必须添加Unicode修饰符“ u”,以便不会将非拉丁字符误解为单词边界:

  • 我面临着与Java的匹配器的其他问题。我试图使用正则表达式匹配我的JSON的内容,而不使用外部库。我的JSON看起来像这样: 但是,我只想匹配上半部分中的单词,即在第一个匹配。我试图创建一个新的模式和匹配器,但我不知道如何进行,也不知道如何在第一次出现

  • 问题内容: 我想做的是一项相当普通的任务,但我在网络上找不到任何参考。我的文字带有标点符号,我想要一个单词列表。 应该 但是只能使用一个参数,因此在用空格分割后,所有单词都带有标点符号。有任何想法吗? 问题答案: 正则表达式合理的情况: