我有这个代码:
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"]
Run Code Online (Sandbox Code Playgroud)
看起来整个字符串已匹配,但哪里已经"b"
消失了?我宁愿期望得到:
[" a , b , c ", "a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)
所以我可以m.shift()
用一个结果,s.split(',')
但也删除空格.
我在regexp中有错误还是我误解了String.prototype.match
?
CBa*_*arr 137
这是一种非常简单直接的方法,无需复杂的正则表达式.
var str = " a , b , c "
var arr = str.split(",").map(function(item) {
return item.trim();
});
//arr = ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)
.map
IE9及以上版本支持本机:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
或者在ES6 +中它变得更短:
var arr = str.split(",").map(item => item.trim());
Run Code Online (Sandbox Code Playgroud)
为了完成,这里是在Typescript中输入信息
var arr: string[] = str.split(",").map((item: string) => item.trim());
Run Code Online (Sandbox Code Playgroud)
Rob*_*b W 14
简答:使用 m = s.match(/[^ ,]/g);
c
)匹配.如果省略{1,}$
,则返回的匹配将是" a , b ", "a", "b"
.简而言之,除非使用global
标志,否则 RegExp会返回与指定组匹配的匹配项/g
.在这种情况下,返回的列表保持对所有匹配的子字符串的引用.
要达到您的效果,请使用:
m = s.replace(/\s*(,|^|$)\s*/g, "$1");
Run Code Online (Sandbox Code Playgroud)
这个替换用原始字符(或什么都没有)替换每个逗号(,
),开头(^
)和结束($
),由空格包围comma
.
如果要获取数组,请使用:
m = s.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/);
Run Code Online (Sandbox Code Playgroud)
这个RE修剪字符串(删除开头和结尾的所有空格,然后将字符串拆分<any whitespace>,<any whitespace>
.注意,空格字符还包括换行符和制表符.如果你想坚持只使用空格,请使用空格() instead of
\s
.
xfg*_*xfg 14
你可以尝试这个没有复杂的正则表达式.
var arr = " a , b , c ".trim().split(/\s*,\s*/);
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
您可以为此目的执行此操作
编辑:删除注释中建议的第二个替换.
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
所以最后我去了/(?=\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"]
Run Code Online (Sandbox Code Playgroud)
非常感谢!
如果您想继续使用正则表达式,请保持代码简单且不使用 ES6:
s.replace(/ /g, '').split(",")
Run Code Online (Sandbox Code Playgroud)
1 - 用空字符串 ('') 替换所有空格 (//g)
2 - 然后将其拆分为一个数组
等等
归档时间: |
|
查看次数: |
50642 次 |
最近记录: |