去掉 。和,在Angular 6中数组列表中每个元素的开头/结尾

时间:2018-08-09 02:56:25

标签: javascript arrays

我有一个Angular的反应形式,它以文本输入的形式获取文件格式

<input type="text" name="formats" formControlName= "formats">

例如:.txt, .zip, .tar.gz

我需要将这些输入转换为数组列表。在@ danday74的帮助下,我能够做到这一点。这是代码:

const input = ".txt, .zip, .tar.gz"

const parts = input.split(' ')

const output = parts.map(x => x.replace(',', '').replace('.', ''))

console.log(output)

代码生成的输出为["txt","zip","tar.gz"],这是我所期望的。

但是,我担心的是,如果用户输入类似.. ., .tar.gf.ds ,.tartar tar.gz zip的内容,则输出分别为[".","","tar.gf.ds","tar"]["tar","targz","zip"]

我的问题是我该如何实现这种方式,以使用户可以输入没有任何特定结构的文件格式(例如.txt, .zip, .tar.gz, .txt .zip .tar.gztxt, zip, tar.gz,{{ 1}}),我应该能够生成类似txt zip tar.gz的输出。就像我应该能够忽略只是["txt","zip","tar.gz"]..的输入,而只考虑带字符串的输入。

2 个答案:

答案 0 :(得分:2)

这是一种通用的方法!

如果字符串中的任何地方有两个..!不要添加它。

可能还剩下一些用例,如果有的话请发表评论

var strings = [
  ".txt, .zip, .tar.gz",
  "..txt .zip .tar.gz a.b.should.be.in", 
  "txt, zip, tar.gz",
  ".., ..., ...., .this.should.be.in, .not..this"
]

var extensions = []

strings
  .forEach((item) => {
    let items = item.split(',');
    if (items.length <= 1) {
      items = item.split(' ');
    }
    items.forEach(ext => {
      const trimedExt = ext.trim()
      if (
        trimedExt.indexOf('..') === -1
      ) {
        if (trimedExt[0] === '.') {
          extensions.push(trimedExt.substr(1))
        } else {
          extensions.push(trimedExt)
        }        
      }
    });
  })
  
 console.log(extensions)

答案 1 :(得分:2)

如果您只关心领先.,,则可以使用正则表达式,如下所示:

const input = '.txt, .zip, .tar.gz, ,.tar, txt, zip, tar.gz, .., .,'

const output = input.split(', ')
  .map(ext => ext.replace(/^\W+/, '')) // remove any character that's not a word character from the beginning of each string
  .filter(Boolean); // filter just to remove empty strings

console.log(output);

如果您还需要删除结尾字符,则可以修改正则表达式以将其从结尾处也删除:

const input = '.txt, .zip, .tar.gz, ,.tar, txt, zip, tar.gz, .txt., .tar.gz., ,.tar,., .., .,'

const output = input.split(' ') // split on space character as trailing commas will be handled in the regex
  .map(ext => ext.replace(/^\W+|\W+$/g, ''))
  .filter(Boolean);

console.log(output);

让我知道是否还有其他考虑事项。