[英]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以使其在您自己的小提琴中起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.