简体   繁体   English

不使用正则表达式 Javascript 删除两个字符之间的字符串

[英]Remove string between two characters using no regex Javascript

I'm trying to remove a sentence from a text file that I'm uploading through an Input file.我试图从我通过输入文件上传的文本文件中删除一个句子。 I need to remove all sentences that are between '/ ' and ' /' so comments line basically.我需要删除'/ '和' /'之间的所有句子,所以基本上是注释行。 Also all the single line comments such as '//' but I took care of it already.还有所有单行注释,例如“//”,但我已经处理好了。 For that I'm not allowed to use any regex or replace function.为此,我不允许使用任何正则表达式或替换功能。 Is there anyone who can help me on that ?有没有人可以帮助我? Thanks谢谢

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)
    }
  }

Split string by / .通过/分割字符串。 Parts that you need to delete are all in odd indexes so filter them out and join this array back into string.您需要删除的部分都在奇数索引中,因此将它们过滤掉并将此数组连接回字符串。

 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(''));

UPDATE更新

I have changed my example to filter only comments我已更改示例以仅过滤评论

 const line = 'asdasada a/*kkkkkkkk*/a sdad asda s/*xxxxxs 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 => { // single line comments if (haveDoubleSlashes || part === '') { haveDoubleSlashes = true; if (part.includes('\\n')) { part = '\\n' + part.split('\\n')[1]; haveDoubleSlashes = false; } else { part = null; } return part; } /* multiline comments */ 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);

If all you care about is if the line contains two solidus characters ( / ), just filter on that:如果您只关心该行是否包含两个实线字符 ( / ),只需对其进行过滤:

 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'));

 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; }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 JavaScript 从两个字符之间的字符串中删除字符 - JavaScript remove characters from a string between two characters Javascript正则表达式-在两个字符之间按字符串分割字符串 - Javascript regex - split string by string between two characters 如何使用正则表达式替换其他两个字符串并删除最后5个字符 - How to replace string between two others and remove last 5 characters using regex JavaScript:使用Regex提取两个可选字符之间的字符串部分 - JavaScript: Extract part of string between two optional characters with Regex 使用正则表达式在javascript中的两个字符之间替换或剥离特定字符 - Replace or Strip a specific character between two characters in javascript using regex 删除两个字符正则表达式之间的所有空格 - Remove all whitespaces between two characters regex 如何使用jQuery或JavaScript中的索引删除字符串之间的字符? - how to Remove the characters in between a string using index in jquery or javascript? 正则表达式通过javascript从字符串中删除重复的字符 - Regex remove repeated characters from a string by javascript Javascript正则表达式错误,两个字符之间的文本 - Javascript regex error, text between two characters javascript正则表达式以匹配两个字符串之间的字符 - javascript regex to match characters between two strings
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM