繁体   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