簡體   English   中英

多行字符串中間的正則表達式?

[英]Regular expression for middle of multiline string?

我正在嘗試從多行字符串中提取名字和/或姓氏,並且無法使用正則表達式。

該字符串有時僅包含一個名字,有時還包含一個姓氏。

以下字符串應變為:“ John Doe”

" 
            <a>Customer: John Doe</a>
        "

並且以下字符串應變為:“ John”

" 
            <a>Customer: John</a>
        "

好的,我正在考慮您的字符串中的以下假設,並且此答案基於這些假設:

1)始終包含此模式的字符串剪切者:SOME_NAME 2)SOME_NAME將始終包含一些字符,但不包含特殊字符。 3)您想在“客戶”字符串之后提取整個名稱。 4)名稱最多為兩個字長。 如果名稱可以包含任意數量的單詞,則需要進行一些修改。

解:

var regEx = /.*Customer:\s?(\w*\s?\w*)\s?.*$/
var myStr = "<a>Customer: John Doe</a>";
var output = myStr.replace(regEx,'$1');

現在,輸出包含字符串“ John Doe”

請記住在應用regEx操作之前先修剪主字符串。

將嘗試在此處添加jsfiddle。 https://jsfiddle.net/k9oo7wLz/1/

使用m標志在多行模式下搜索

var regex = /Customer:\s*(\w+)\s*(\w*)/gmi;
var result = regex.exec(inputStr);
var firstName = "";
var lastName = "";
if (result) {
  firstName = result[1];
  if (result.length === 3)
    lastName = result[2];
}

這是上面Dummy答案的改進版本:

    var text = yourInputText;
    var regex = /Customer:\s*(\w+)\s(\w*)/gm;
    var result = regex.exec(text);
    var theValue;
    if (result) {
      theValue = "First Name: " + result[1];
      if ( result[2] != "" ) {
        theValue += "<br/>Last Name: " + result[2];
      }
    }

您必須測試result[2]的值, result[2]不僅僅是測試結果數組的長度。 這是因為您在正則表達式中有兩個捕獲組。 在這種情況下,長度始終為3,但是第三個元素為空。

我想不出一個不需要您執行一些后期捕獲邏輯的正則表達式。 您要么必須有一個大型捕獲組才能同時獲取兩種類型的字符串,要么需要兩個捕獲組。 您只需要決定哪種邏輯最適合您

我已經在jsfiddle中進行了設置 ,將該邏輯塞入函數並將其附加到包含示例字符串的兩個div的單擊上,然后嘗試一下。 我在小提琴中使用的$函數只是來自MooTools ,使我可以訪問DOM,請不要被它們分散注意力。 如果您嘗試復制此小提琴,則必須確保導入MooTools以使其在您自己的小提琴中起作用。

您可以使用以下正則表達式:

"[\s\S]*?<a>\w+: (.+)<\/a>[\s\S]*?"

JSFiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM