考虑到任意文本,我想在其中识别特定文本。到目前为止,我一直在编写代码,但是,要找到某种方法来解决这个问题真的很困难。
重要的一点是,当我得到文本时,空格是一定数量的,但是在我得到其他文本进行比较之后,这就是为什么我不需要关心空格的数量。
第一个文本示例:
Here, bla bla bla bla
() => console.log()
end
要根据第一个文本在第二个文本上选择的文本示例:
() => console.log()
用于选择我想要的值的第二个文本示例:
Here, bla bla bla bla
() => console. log()
en d
只需记住一些标准:
直到现在我的代码:
let firstCharCode = mainText.replace(/ /g,'').indexOf(textToBeSelected.replace(/ /g, ''))
let lastCharCode = firstCharCode + textToBeSelected.replace(/ /g, '').length - 1
let numberOfCharsToSelect = lastCharCode - firstCharCode
for (let i = 0; i < a.length; i++) {
// iterate through them checking where is the chars?
}
答案 0 :(得分:1)
此功能应该可以解决您的问题。
searchWithoutBlanks(text, search)
如果在true
中发现了search
,则返回text
,而没有查看空格。
以下是摘要:
-删除搜索中的所有空格
-遍历搜索字符并转义它们,并在每个字符后添加\s*?
-使用此新生成的Regex测试您的初始文本。
const text = `
Here, bla bla bla bla
() => console.log()
end
`;
//Utility function to escape a String for RegExp use
const escapeRegExp = str => str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
const searchWithoutBlanks = (string, search) => {
let sanitizedSearch = search.replace(/\s+/g, ''); //Removes any whitespace
let regexString = '';
for(let i = 0; i < sanitizedSearch.length; i++){ //Loop on your search
regexString += escapeRegExp(sanitizedSearch[i]) + '\\s*?'; //Add \s*? after each sanitized char
}
console.log(regexString); //Here is the resulting RegExp
return new RegExp(regexString).test(string);
}
console.log(searchWithoutBlanks(text,'()=>console.log()'));
console.log(searchWithoutBlanks(text,'this shouldn\'t match'));
答案 1 :(得分:1)
这里是一个示例,但不确定其性能如何。
基本上是从文本中查找一个RegExp:首先删除空格,然后转义regexp字符(当心,必须用每个regexp字符来完成),然后在每个char之间添加对任何字符的期望空格或跳线。
然后,很容易使用indexOf
获取比赛的索引。
const text = `Here, bla bla bla bla
() => console. log()
en d`;
const target = '() => console.log()';
const escapeRegexp = c => c.replace(/[)(.]/g, c => `\\${c}`); // Protect every regexp char here.
const regexp = new RegExp(target.replace(/\s/g, '').split('').map(escapeRegexp).join('\\s*') ,'g');
const results = regexp.exec(text);
results.map(r => console.log(`Find match '${r}' starting at index ${text.indexOf(r)} and ending at index ${text.indexOf(r) + r.length}`));
注意:要从RegExp语法正确地转义字符串:Escape string for use in Javascript regex