用','拆分句子并删除周围的空格

时间:2011-10-08 09:45:18

标签: javascript regex

我有这段代码:

var r = /(?:^\s*([^\s]*)\s*)(?:,\s*([^\s]*)\s*){0,}$/
var s = "   a   ,  b  , c "
var m = s.match(r)
m => ["   a   ,  b  , c ", "a", "c"]

看起来整个字符串已经匹配,但"b"已经消失了?我宁愿期望得到:

["   a   ,  b  , c ", "a", "b", "c"]

这样我可以m.shift()使用s.split(',')这样的结果,但也删除了空格。

我是否在正则表达式中有错误或是否误解了String.prototype.match

8 个答案:

答案 0 :(得分:122)

这是一个非常简单的&直接的方法,无需复杂的正则表达式。

var str = "   a   ,  b  , c "
var arr = str.split(",").map(function(item) {
  return item.trim();
});
//arr = ["a", "b", "c"]

IE9及更高版本支持原生.maphttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

或者在ES6 +中它变得更短:

var arr = str.split(",").map(item => item.trim());

为了完成,这里是在Typescript中输入信息

var arr: string[] = str.split(",").map((item: string) => item.trim());

答案 1 :(得分:15)

ES6速记:

str.split(',').map(item=>item.trim())

答案 2 :(得分:13)

简答:使用m = s.match(/[^ ,]/g);

<小时/> 您的RE无法按预期工作,因为最后一组匹配最近的匹配(= c)。如果省略{1,}$,则返回的匹配将为" a , b ", "a", "b"。简而言之,您的RegExp会返回与指定组匹配的匹配项,除非您使用global标记/g。在这种情况下,返回的列表保留对所有匹配的子字符串的引用。

要达到效果,请使用:

m = s.replace(/\s*(,|^|$)\s*/g, "$1");

此替换将替换每个逗号(,),开头(^)和结尾($),由空格包围,原始字符(comma或没有)。

如果您想获得数组,请使用:

m = s.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/);

此RE修剪字符串(删除开头和结尾处的所有空格,然后将字符串拆分为<any whitespace>,<any whitespace>。请注意,空白字符还包括换行符和制表符。如果您想要仅限于空格,使用空格()代替\s

答案 3 :(得分:10)

您可以在没有复杂正则表达式的情况下尝试此操作。

var arr = "   a   ,  b  , c ".trim().split(/\s*,\s*/);
console.log(arr);

答案 4 :(得分:8)

所以最后我选择了/(?=\S)[^,]+?(?=\s*(,|$))/g,它提供了我需要的东西:所有句子都被','分开,没有周围的空格。

'       a,    OMG     abc b a b, d o WTF        foo     '.
  match( /(?=\S)[^,]+?(?=\s*(,|$))/g )
=> ["a", "OMG     abc b a b", "d o WTF        foo"]
非常感谢!

答案 5 :(得分:7)

您可以为此目的执行此操作 编辑:根据评论中的建议删除第二次替换。 s.replace(/^\s*|\s*$/g,'').split(/\s*,\s*/)
首先replace修剪字符串,然后split函数在'\s*,\s*'左右分割。这会在输入["a", "b", "c"]

上提供输出" a , b , c "

至于为什么你的正则表达式没有捕获'b',你重复捕获的组,所以只捕获最后一次。更多相关内容http://www.regular-expressions.info/captureall.html

答案 6 :(得分:1)

如果要继续使用正则表达式,请保持代码简单而不使用ES6:

s.replace(/ /g, '').split(",")

1-用空字符串('')替换所有空格(/ / g)

2-然后将其拆分为一个数组

瞧瞧

答案 7 :(得分:0)

如果逗号分隔列表有大量值,您也可以使用以下代码段:

data.trim().split(/\s*,\s*/)