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

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

在 Javascript 中使用正則表達式提取姓名和電子郵件

在 Javascript 中使用正則表達式提取姓名和電子郵件

繁花不似錦 2023-06-15 09:42:42
我有一個帶類型的字符串,預期的結果是input = "[Peter Jane Minesotta <[email protected]>]"輸出Fname = "Peter"SecondAndRemainingNames = "Jane Minesotta"email = "[email protected]"input = "[Peter  <[email protected]>]"輸出    Fname = "Peter"    SecondAndRemainingNames = ""    email = "[email protected]我需要使用正則表達式提取我試過input.match(/\w/gim)
查看完整描述

4 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

您可以使用


const rx = /\[(\S+)(?:\s+(.*?))?\s+<([^<>]+)>]/

const strings = ['[Peter Jane Minesotta <[email protected]>]','[Peter  <[email protected]>]'];

for (const s of strings) {

  const [_, Fname, SecondAndRemainingNames, email] = s.match(rx);

  console.log([Fname, SecondAndRemainingNames, email]);

}

請參閱正則表達式演示

細節

  • \[- 一個[字符

  • (\S+)- 第 1 組:一個或多個非空白字符(留在 內[...],您可以改用[^\s[\]]+

  • (?:\s+(.*?))?- 一個由 1+ 個空格組成的可選字符串,后跟第 2 組,盡可能少地捕獲除換行符以外的任何零個或多個字符(如果您想留在 內,請替換.*?為)[^[\]]*?[...]

  • \s+- 一個或多個空格

  • <([^<>]+)>- , 第 3 組:除and>之外的一個或多個字符,然后<>>

  • ]- 一個]字符。


查看完整回答
反對 回復 2023-06-15
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

您可以使用 3 種不同的正則表達式來簡化問題。此外,您可以依賴字符串的結構:


const input1 = "[Peter Jane Minesotta <[email protected]>]"


const input2 = "[Peter  <[email protected]>]"


function getFName(input) {

  const name =  input.match(/(?<=\[)\w+/);

  return name ? name[0] : '';

}


function getSNames(input) {

  const names =  input.match(/(?<!\[)(?<=\s)\w+(?=\s)/g);

  return names ? names.join(' ') : '';

}


function getEmail(input) {

  const mail =  input.match(/(?<=<)(?:\w|\.|@)+(?=>])/);

  return mail ? mail[0] : '';

}


const x = {

  name: getFName(input1),

  otherNames: getSNames(input1),

  mail: getEmail(input1)

};


console.log(x);



const y = {

  name: getFName(input2),

  otherNames: getSNames(input2),

  mail: getEmail(input2)

};


console.log(y);


查看完整回答
反對 回復 2023-06-15
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

這應該給你你想要的......

^\[(\w+)\s(?:((?:\w+\s?)*)\s)?<(.+)>\]$
  1. 第一組(\w+)將捕獲第一個單詞(一旦找到空間就停止),在您的情況下將是 firstName

  2. 第二組(?:((?:\w+\s?)*)\s)? 將捕獲最后一個空格(在 firstName 之后)和<第一次出現之間的所有內容,您要將其保存在SecondAndRemainingNames中。注意:?在這個組的末尾使這個模式的出現成為可選的,這是你想要的,如你的第二個例子所示。

  3. 最后,最后一組將捕獲<>之間的所有內容,對您來說就是電子郵件

我已經用你的兩個樣本輸入測試了這個模式,它按預期工作.. :)


查看完整回答
反對 回復 2023-06-15
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

這很好用:


var all = input.match(/(^\[\w+)|(\w+ )+|<.+>/gi);

var Fname = ""

var SecondAndRemainingNames = ""

var email = ""

if (all.length == 3) {

    Fname = all[0];

    SecondAndRemainingNames = all[1];

    email = all[2];

} else if (all.length == 2) {

    Fname = all[0];

    email = all[1];

}

Fname = Fname.substring(1);

if (SecondAndRemainingNames != "") {

    SecondAndRemainingNames = SecondAndRemainingNames.trim();

}

email = email.substring(1).slice(0, -1);


查看完整回答
反對 回復 2023-06-15
  • 4 回答
  • 0 關注
  • 274 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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