【问题标题】:find a first match only and return remaining characters in array仅查找第一个匹配项并返回数组中的剩余字符
【发布时间】:2017-11-18 08:38:12
【问题描述】:

我正在使用正则表达式在字符串中查找匹配项。

输入为“an”

变量为“香蕉”

需要输出为数组 ['b','a','n','a']

我尝试了以下事情:

https://regex101.com/r/k3bRid/1

代码

var regex = '[^' + input + ']';
            regex = new RegExp(regex, 'gi')
            var reduceArr = variable.match(regex);

它应该生成包含剩余字符的数组,不包括第一个输入匹配.. 输入可以是单个字符或两个字符

示例尝试:

输入:“ta”

对于变量:“说话”

效果很好

【问题讨论】:

  • 我不太明白。您的标题要求“没有重复的剩余字符”,但['b','a','n','a'] 确实有重复的as。请详细说明。
  • 抱歉输入重复...正则表达式应该只匹配第一次...剩余的字符应该作为数组中的字符返回

标签: javascript arrays regex


【解决方案1】:

您可以获取搜索字符串并将第一个查找替换为空字符串。然后拆分字符串以获得仅单个字符。

function getParts(input, string) {
    var regex = new RegExp(input, 'i')
    return string.replace(regex, '').split('');
}

console.log(getParts('an', 'banana'));

【讨论】:

  • 感谢 Nina .. 简单而出色的答案。每次都回答我的问题:)
【解决方案2】:

这会在输入字符串 (regex101) 之前和之后查找匹配项:

var input = 'an';
var variable = 'banana';

var regex = new RegExp('^(.*?)' + input + '(.*)$', 'i');
var reduceArr = (variable.match(regex) || []).slice(1).join('').split(''); // if matches where found, combine capture groups and split to characters

console.log(reduceArr);

【讨论】:

    【解决方案3】:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script src="https://code.jquery.com/jquery-1.9.1.js"></script>
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    
        <script type="text/javascript">
            $(document).ready(function () {
                var input = 'an';
                var variable = 'banana';
                var regex = variable.replace(input, '');;
                var arr=new Array(regex.split(''));
                console.log(arr);
            });
        </script>
    
    </head>
    <body>
    </body>
    </html>

    【讨论】:

    • 好兄弟……如果你把线串起来,那就太好了
    【解决方案4】:

    不需要正则表达式。您可以简单地执行以下操作;

    var bazooka = (t,s) => s.replace(t,"").split("");
    
    console.log(bazooka("an","banana"));
    console.log(bazooka("harbur","berlingo"));

    【讨论】:

      猜你喜欢
      • 2020-08-07
      • 2019-11-13
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2015-05-23
      相关资源
      最近更新 更多