【问题标题】:Regular expression for middle of multiline string?多行字符串中间的正则表达式?
【发布时间】:2017-05-14 18:59:12
【问题描述】:

我正在尝试从多行字符串中提取名字和/或姓氏,但无法使用正则表达式。

字符串有时只包含名字,有时还存在姓氏。

下面的字符串应该变成:“John Doe”

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

下面的字符串应该变成:“John”

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

【问题讨论】:

  • 你使用什么语言/框架?
  • javascript @MathiasR.Jessen
  • /\s*.*客户:\s?(\w*\s*\w*)\s?.*\s*/ 解决了!

标签: javascript regex


【解决方案1】:

好的,我正在考虑您的字符串中的以下假设,此答案基于这些假设:

1) 始终包含此模式的字符串 Cutomer: 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”

请记住在应用正则表达式操作之前修剪主字符串。

将尝试在此处添加 jsfiddle。 https://jsfiddle.net/k9oo7wLz/1/

【讨论】:

  • 谢谢!完美运行!
【解决方案2】:

使用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];
}

【讨论】:

    【解决方案3】:

    这是上面 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] 的值,而不仅仅是测试结果数组的长度。这是因为您在正则表达式中有两个捕获组。在这种情况下,长度始终为 3,但第三个元素将为空。

    我想不出一个不需要您执行一些后期捕获逻辑的正则表达式。您要么必须拥有一个可以获取两种类型的字符串的大型捕获组,要么必须拥有两个捕获组。您只需要决定哪种逻辑最适合您

    我已经在jsfiddle 中设置了这个,它把这个逻辑塞进一个函数中,并将它附加到两个包含你的示例字符串的 div 的点击上,试试看。我在小提琴中使用的 $ 函数只是来自 MooTools 让我可以访问 DOM,不要被它们分心。如果您尝试复制此小提琴,则必须确保导入 MooTools 以使其在您自己的小提琴中工作。

    【讨论】:

      【解决方案4】:

      您可以使用以下正则表达式:

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

      JSFiddle

      【讨论】:

        猜你喜欢
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 2016-08-12
        • 1970-01-01
        相关资源
        最近更新 更多