正则表达式匹配直到某个单词并清除所有前导和尾随空格

所以我需要以两种方式修剪某个字符串(不同的结果)

myString = '3rd Floor Empire State Building',请注意 myString 的格式可以是:

  • 哈利法塔 13 楼

  • 克莱斯勒大厦二楼

  • 4楼大笨钟

基本上我在这里想说的是地板这个词是一致的。

所以这就是我需要做的:

  1. 匹配字符串直到某个单词并从该单词开始删除所有内容。

所以从 myString 开始,我只需要“3rd”这个词——我目前所拥有的是:myString.match(/.+?(?=floor)/ig)但是这段代码省略了一个空格,它变成了“3rd”

  1. 匹配一个字符串直到某个单词,然后从该单词中向后删除所有内容。

所以从 myString 中,我只需要'Empire State Building'这个词。

编辑:我还需要牢记这些假设,是否有可能以及如何使其简洁?(如果可能,单线):

  • 接受地板或地板

  • 只取 floor/flr 之前的第一个单词(例如,如果输出是公寓 2nd flr building 或公寓 2nd floor bldg,它应该只取 2nd 和 building/bldg)


慕工程0101907
浏览 206回答 3
3回答

手掌心

或者,您可以使用字符串。分裂()const myString = '3rd Floor Empire State Building';const certainString = ' Floor ';let before = myString.split(certainString)[0];let after = myString.split(certainString)[1];console.log(before);console.log(after);如果区分大小写是一个问题,我们可以在比较之前将它们转换为小写(或大写)。检查下面的代码段:const myString = '3rd Floor Empire State Building';const certainWord = ' Floor ';//----------------------------------------------const lowerMyString = myString.toLowerCase();const lowerCertainWord = certainWord.toLowerCase();const beforeEndIndex = lowerMyString.indexOf(lowerCertainWord);const afterStartIndex = beforeEndIndex + lowerCertainWord.length;const before = myString.slice(0, beforeEndIndex);const after = myString.slice(afterStartIndex, myString.length);//----------------------------------------------console.log(before);console.log(after);

慕容森

使用正则表达式:https://regex101.com/r/a3WlFM/2const re = /([\s\S]*?)(?:\s+)floor(?:\s+)([\w+ \.\,\?\!]*)/gimconst str = `3rd Floor Empire State Building13th Floor Burj Khalifa2nd floor Chrysler Building4th flOor Big Ben3rd Floor floortech building` match = re.exec(str);while (match != null) {  // matched text: match[0]  // match start: match.index  // capturing group n: match[n]  console.log(match[1],"-",match[2])  match = re.exec(str);}或者没有正则表达式const myString = '3rd Floor Empire State Building'const startPos = myString.toLowerCase().indexOf(" floor ")console.log("Floor:",myString.slice(0,startPos),"Address:",myString.slice(startPos+7))

千巷猫影

在第一个示例中,您没有在前瞻中包括地板之前的空间。您更新的模式将是.+?(?= floor)See a regex demo如果要匹配这两个部分,可以使用 2 个捕获组并从匹配非空白字符开始,\S以防止出现空字符串。用于/i不区分大小写的匹配,如果/g需要,则用于获取所有匹配项。/(\S.*?) floor (\S.*)/gi模式将匹配(\S.*?)捕获组 1,匹配非空白字符任何非贪婪字符 floor 被空间包围的比赛地板(\S.*)捕获组 2,匹配空白字符和行的其余部分const regex = /(\S.*?) floor (\S.*)/gi;const str = `13th Floor Burj Khalifa2nd floor Chrysler Building4th flOor Big Ben3rd Floor Empire State Building floor `;let m;while ((m = regex.exec(str)) !== null) {  // This is necessary to avoid infinite loops with zero-width matches  if (m.index === regex.lastIndex) {    regex.lastIndex++;  }  console.log(m[1]);  console.log(m[2]);  console.log("\n");}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript