【问题标题】:Javascript seperate with regex but take like one word if string surround by specific chars?Javascript与正则表达式分开,但如果字符串被特定字符包围,则像一个单词?
【发布时间】:2017-01-27 03:38:35
【问题描述】:
var mystring = 'Hello test1 "test2 but one word" test3 test4  '; 

var mystring_ar= mystring.split(/\s+/);

好的,我有这个/\s+/ 表达式,所以我可以与空格分隔,但我的问题是我想与空格分隔,如果" 包围的单词,正则表达式不应该分隔单词,例如"test2 but one word" 例如下面:

'Hello test1 "test2 but one word" test3 test4  '.split(regex) 
=> ['Hello','test1','test2 but one word','test3','test4']

这可能吗?

已编辑 我找到了一半的解决方案,但未正确完成以下代码,但仅适用于单词,例如,如果字符串为 a/b/as d ,则不会将其分隔为 a/b/as and d,而是将其分隔为 a,b,as,d

keywords = keywords.match(/\w+|"[^"]+"/g);

但我认为解决方案应该使用split。它应该像与whitespaces 分开一样工作,并且不要在"" 内部分开

【问题讨论】:

  • @JonathanLonowski 谢谢它解决了我的问题 :)
  • @JonathanLonowski 但我在链接中找到的解决方案有问题。它使用 ` /\w+|"[^"]+"/g ` 但它只接受单词,但我需要单独来自空格,但如果它在"asd asd asd" 之间,则不应将它们分开。但似乎/\w+|"[^"]+"/g 这个表达式也分开t1/t2 to t1 and t2 which is not correct for this problem
  • @JonathanLonowski 我认为解决方案应该是拆分。它应该像与空格分开一样工作,而不是在“”内部分开。我该怎么做?
  • 然后用\S代替\w,把引用的表达式放在前面:/"[^"]*"|\S+/g(和match)。

标签: javascript jquery regex split


【解决方案1】:

使用match 更容易。要匹配任何非空白,您可以使用 \s 的反义词,即 \S。由于引号也与\S 匹配,因此您还需要首先测试引号,并且仅将\S 作为替代项。也许你也想忽略一个引用的部分,当它后面紧跟着一个非空格时,比如"thi"s word"可能不应该变成['thi','s','word'],而是['"thi"s','word']。您可以通过负面展望来做到这一点:(?!\S)。合起来就是:

/"[^"]*"(?!\S)|\S+/g

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多