JavaScript:使用Regex在两个可选字符之间提取字符串的一部分

时间:2016-09-05 08:30:46

标签: javascript regex

我正在使用javascript中的正则表达式来捕获两个可选字符之间的部分字符串。

可选字符为:'='和'||'

方案:

  • LENGTH =一条简单的信息|| 5
  • LENGTH =一条简单的消息
  • LENGTH || 5

获取'||'之后的值我用split()函数管理它。

为了获得“一个简单的消息”部分,当'='和'||'时,我设法用正则表达式match(/\=(.*)\|\|/).pop()提取字符串在字符串中。

当有两个可选字符之一时,是否有任何关于使用一个正则表达式提取字符串的建议?

我也试过了/(\=)?(.*)(\|\|)?/但是没有用。

2 个答案:

答案 0 :(得分:2)

您可以使用此基于正面预测的否定前瞻来捕获=和可选||的值:

/=((?:(?!\|\|).)*)/

RegEx Demo

答案 1 :(得分:2)

这应该可以做你想要的:

<?php

    $country = array(
                 'zh' => array( 'tw' => "Traditional Chinese"),
                 'zh' => array( 'cn' => "Simplified Chinese"),
                 'en' => "English",
                 'jp' => "Japanese"
               );


 echo $country['zh']['tw'];
 echo $country['zh']['cn'];
 echo $country['en'];
 echo $country['jp'];

这将匹配^LENGTH(?:=([^|]*))?(?:\|\|(\d+))?$ LENGTH=之间的部分以及之后的部分。如果存在,两者都将在结果中返回。

示例:

||

当然,这里有一些关于数据实际格式的假设。

输出:

[
    "LENGTH=A simple message||5",
    "LENGTH=A simple message",
    "LENGTH||5"
].forEach(function(string)
{
    var result = string.match(/^LENGTH(?:=([^|]*))?(?:\|\|(\d+))?$/);
    console.log("found:",result[1],result[2]);
});