问题描述
我在Angular中有一个反应形式,它以文件格式作为文本输入
I have a reactive form in Angular which gets file format as text input
<input type="text" name="formats" formControlName= "formats">
例如: .txt,.zip,.tar.gz
我需要将这些输入转换为数组列表。在@ danday74的帮助下,我能够做到这一点。这是代码:
I needed to convert those inputs as an array list. With the help of @danday74, I can able to do that. here is the code:
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]
,这是我期望的。
The output generated by the code is ["txt","zip","tar.gz"]
, which is what I expected.
但是,我担心的是,如果用户输入这样的内容 .. .. .tar.gf.ds,.tar
或 tar tar.gz zip
,输出为 [。,, tar.gf.ds, tar]
和 [ tar, targz, zip]
However, my concern is, if a user enters something like this .. ., .tar.gf.ds ,.tar
or tar tar.gz zip
the output will be [".","","tar.gf.ds","tar"]
and ["tar","targz","zip"]
respectively
我的问题是我该如何实现这种方式,使用户可以输入没有任何特定结构的文件格式(例如: .txt,.zip,.tar.gz,
.txt .zip .tar.gz
, txt,zip,tar.gz
, txt zip tar.gz
),我应该能够生成这样的输出: [ txt, zip, tar.gz]
。就像我应该能够忽略输入只是 ..
或。,
的输入,而只考虑输入
My question is how do I implement this in such a way that a user can enter the file format without any specific structure (for Eg: .txt, .zip, .tar.gz,
.txt .zip .tar.gz
, txt, zip, tar.gz
, txt zip tar.gz
) and I should be able to generate the output like this ["txt","zip","tar.gz"]
. like I should be able to neglect the input if it is just ..
or .,
and only consider the input with string.
推荐答案
如果您只担心以开头。
和,
,您可以按如下方式使用正则表达式:
If you're only concerned about leading .
and ,
, you could use a regex as follows:
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);
如果您还需要删除结尾字符,则可以修改正则表达式以将其从结尾处也删除:
If you also need to remove trailing characters you could modify the regex to remove them from the end as well:
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);
让我知道是否还有其他注意事项。
Let me know if there are any other considerations.
这篇关于去掉 。和,在Angular 6中数组列表中每个元素的开头/结尾的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!