为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕工程0101907 2022-06-16 15:02:57
所以我需要以两种方式修剪某个字符串(不同的结果)myString = '3rd Floor Empire State Building',请注意 myString 的格式可以是:哈利法塔 13 楼克莱斯勒大厦二楼4楼大笨钟基本上我在这里想说的是地板这个词是一致的。所以这就是我需要做的:匹配字符串直到某个单词并从该单词开始删除所有内容。所以从 myString 开始,我只需要“3rd”这个词——我目前所拥有的是:myString.match(/.+?(?=floor)/ig)但是这段代码省略了一个空格,它变成了“3rd”匹配一个字符串直到某个单词,然后从该单词中向后删除所有内容。所以从 myString 中,我只需要'Empire State Building'这个词。编辑:我还需要牢记这些假设,是否有可能以及如何使其简洁?(如果可能,单线):接受地板或地板只取 floor/flr 之前的第一个单词(例如,如果输出是公寓 2nd flr building 或公寓 2nd floor bldg,它应该只取 2nd 和 building/bldg)
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超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);


查看完整回答
反对 回复 2022-06-16
?
慕容森

TA贡献1853条经验 获得超18个赞

使用正则表达式:


https://regex101.com/r/a3WlFM/2


const re = /([\s\S]*?)(?:\s+)floor(?:\s+)([\w+ \.\,\?\!]*)/gim


const str = `3rd Floor Empire State Building

13th Floor Burj Khalifa

2nd floor Chrysler Building

4th flOor Big Ben

3rd 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))



查看完整回答
反对 回复 2022-06-16
?
千巷猫影

TA贡献1829条经验 获得超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 Khalifa

2nd floor Chrysler Building

4th flOor Big Ben

3rd 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");

}


查看完整回答
反对 回复 2022-06-16
  • 3 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号