亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式匹配直到某個單詞并清除所有前導和尾隨空格

正則表達式匹配直到某個單詞并清除所有前導和尾隨空格

慕工程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 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號