我試圖從我通過輸入檔案上傳的文本檔案中洗掉一個句子。我需要洗掉'/ '和' /'之間的所有句子,所以基本上是注釋行。還有所有單行注釋,例如“//”,但我已經處理好了。為此,我不允許使用任何正則運算式或替換功能。有沒有人可以幫助我?謝謝
class Inpute extends Component{
constructor(props){
super(props);
this.state = {
fileName: '',
fileContent: ''
};
}
handleFile = e =>{
const file = e.target.files[0];
const reader = new FileReader();
reader.readAsText(file);
reader.onload = () => {
this.setState({fileName: file.name, fileContent: reader.result});
if(reader.result.includes('//')){
var newText = reader.result
newText = newText
.split('\n')
.filter(x => !x.includes('\/\/'))
.join('\n')
this.setState({fileName: file.name, fileContent: newText})
}
}
reader.onerror = () =>{
console.log('File Error : ', reader.error)
}
}
uj5u.com熱心網友回復:
分割字串/。您需要洗掉的部分都在奇數索引中,因此將它們過濾掉并將此陣列連接回字串。
const string = 'asdasada a/kkkkkkkk/a sdad asda s/xxxxx/s dasd';
const arr = string.split('/').filter((_, index) => index%2 === 0);
console.log(arr.join(''));
更新
我已更改示例以僅過濾評論
const line = 'asdasada a/*kkkkkkkk*/a sdad asda s/*xxxxx*/s dasd x// asda sd/\n'
'asdas das a// asdasda\n'
'x/*bbbbb*/c ad';
let prevPart = null;
let haveDoubleSlashes = false;
const cleaned = line.split('/').map(part => {
if (haveDoubleSlashes || part === '') {
haveDoubleSlashes = true;
if (part.includes('\n')) {
part = '\n' part.split('\n')[1];
haveDoubleSlashes = false;
} else {
part = null;
}
return part;
}
if (part.startsWith('*') && part.endsWith('*')) {
prevPart = null;
return null;
}
if (prevPart !== null) {
part = '/' part;
}
prevPart = part;
return part;
}).filter(part => part !== null).join('');
console.log(cleaned);
uj5u.com熱心網友回復:
如果您只關心該行是否包含兩個實線字符 ( /),只需對其進行過濾:
const sample = `blah blah // blah blah\nblah blah /blah blah/ blah\nblah blah blah`;
const lines = sample.split('\n');
const good = lines.filter(x =>
// [...x] makes the line an array of characters
// reduce runs for each character, aggregating the result.
// agg is the aggregation, cur is the current character
// Here it's just counting the number of /s and returning false if there are
// fewer than two
[...x].reduce((agg, cur) => agg = cur === '/' ? agg 1 : agg, 0) < 2
);
console.log(good.join('\n'));
uj5u.com熱心網友回復:
function stripMultilineComments(str) {
let posOpen;
let posClose;
while ((posOpen = str.indexOf('/*')) !== -1) {
posClose = Math.max(
0, str.indexOf('*/', (posOpen 2))
) || (str.length - 2);
str = [
str.substring(0, posOpen),
str.substring(posClose 2),
].join('');
}
return str;
}
function stripSingleLineComment(str) {
let idx;
if (
(str.trim() !== '') &&
((idx = str.indexOf('//')) !== -1)
) {
str = str.substring(0, idx);
}
return str;
}
function stripComments(value) {
return stripMultilineComments(
String(value)
)
.split('\n')
.map(stripSingleLineComment)
.join('\n');
}
const sampleData = `
Lorem ipsum dolor sit amet/*, consectetur adipiscing elit,
sed do eiusmod tempor incididunt*/ ut labore et dolore
magna aliqua. // Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris/*nisi ut
aliquip ex ea commodo consequat*/. Duis aute irure dolor
in reprehenderit// in voluptate velit esse cillum dolore
eu fugiat nulla pariatur.// Excepteur sint occaecat
/*cupidatat non proident, */sunt in culpa qui officia
deserunt mollit anim id est laborum.
`;
console.log(
stripComments(sampleData)
);
console.log(
stripComments(sampleData) === `
Lorem ipsum dolor sit amet ut labore et dolore
magna aliqua.
quis nostrud exercitation ullamco laboris. Duis aute irure dolor
in reprehenderit
eu fugiat nulla pariatur.
sunt in culpa qui officia
deserunt mollit anim id est laborum.
`);
.as-console-wrapper { min-height: 100%!important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355153.html
標籤:javascript 反应 代替 文本文件
上一篇:節點承諾屬性
