【问题标题】:Regex match the words from a string without the start and end space正则表达式匹配字符串中的单词,没有开始和结束空格
【发布时间】:2017-12-06 07:13:17
【问题描述】:

我正在尝试匹配字符串中的一些单词但没有成功。

比如说,我有这个字符串:

"word , word , two words, word"

我要做的是匹配单词,但没有开头或结尾的空格。但它应该接受单词之间的空格。匹配结果的数组应该是:

["word","word","two words","word"]

有人可以帮助我或给我一些关于我将如何去做的见解吗?

谢谢

编辑:我尝试并成功的是分两部分进行:

match(/[^(,)]+/g)

并使用 map 从结果数组中删除所有空格:

map(value => value.trim());

但只想通过正则表达式来做,不知道怎么做。

【问题讨论】:

  • 发布你的尝试
  • 试试这个"word , word , two words, word".match(/(\w+\s*\w+)/g)
  • @HassanImam 这不适用于三个词。

标签: javascript regex


【解决方案1】:
\w[\w ]*?(?:(?=\s*,)|$)

解释:

\w[\w ]*?

匹配中间有 0 个或多个空格的单词字符,但从不匹配开头。 (懒惰的)

(?:(?=\s*,)|$)

此非捕获组向前查找空格,后跟,字符串结尾。

Try it here.

【讨论】:

    【解决方案2】:

    你可以用逗号分隔两边的可选空格:

    var str = "word , , word , two words, word";
    
    var arr = str.split(/(?:\s*,\s*)+/);
    
    console.log(arr);
    
    //=> ["word", "word", "two words", "word"]

    【讨论】:

    • 感谢您的回答
    • 当您可以使用简单的拆分选项时,为什么选择具有前瞻和组等的复杂正则表达式。
    • 例如,regex101.com/r/HqYhqS/2 只需 58 步即可完成 split,而您选择的正则表达式则需要 216 步。
    • @anubhava 我认为“问题”是,在拆分时,空项目可能会进入最终结果,请尝试使用 "word , , word , two words, word" 字符串的正则表达式。通过匹配,您不会在结果中得到空元素。
    • 那我们就可以使用str.split(/(?:\s*,\s*)+/)或者查看编辑了。
    【解决方案3】:

    您可以应用以下正则表达式:

    (\w+\s*\w+)
    

    匹配的

    • 1 个或多个单词字符后跟
    • 0 到 N 个白色字符(空白字符:空格、制表符、换行符、回车符、垂直制表符)后跟
    • 1 个或多个单词字符。

    http://www.rexegg.com/regex-quickstart.html

    【讨论】:

    • 感谢您的文档。我去看看
    【解决方案4】:

    这可能是您正在寻找的捕获组,所以迭代 \1

    \s*([\w\s]+)\s*
    

    【讨论】:

    • 感谢您抽出宝贵时间回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2020-08-23
    • 2017-06-28
    • 2014-09-15
    • 2018-03-05
    相关资源
    最近更新 更多