【问题标题】:How to use a variable in a match method with regular expression pattern如何在具有正则表达式模式的匹配方法中使用变量
【发布时间】:2017-09-22 12:08:30
【问题描述】:

我想在 JavaScript 中从一个字符串中获取一个数组,将其切成两半。

例子:

// From this: 
   var myStr = 'cocacola';

// To this: 
   var myArray = ['coca', 'cola'];

我尝试了以下方法:

var myStr = 'cocacola';
var strHalf = myStr.length / 2;
// This won't work
var myArray = myStr.match(/.{1,strHalf}/g);
// Only this will work fine
var myArray = myStr.match(/.{1,4}/g);

【问题讨论】:

  • 为什么需要正则表达式?看看substring方法

标签: javascript regex match


【解决方案1】:

你可以用 String.slice() 来解决这个问题

var myStr = 'cocacola';

let len = myStr.length;

let result = [myStr.slice(0, len/2), myStr.slice(len/2)]
console.log(result);

【讨论】:

    【解决方案2】:

    您需要使用RegExp() 构造函数并创建一个它可以理解的字符串:

    var regexString = "/.{1," + strHalf + "}/g";
    var myRegex = new RegExp( regexString );
    var myArray = myStr.match( myRegex );
    

    ...但是要小心这样做;如果strHalf 是一个包含/ 等特殊字符的字符串,那么您的正则表达式将有奇怪的行为。

    【讨论】:

    • @poster 您不需要“使用”正则表达式,但它确实是一个可行的选择。
    • 是的,根据问题标题,我认为这是@Gabriel 可能想在其他地方使用的一种技术。
    【解决方案3】:

    您可以使用 RegExp 构造函数创建非硬编码的正则表达式:

    var myArray = myStr.match(new RegExp('/.{1,'+strHalf+'}/g'));
    

    构造函数不知道strHalf 应该是一个整数,因此请确保您可以控制它。

    这会引入很多安全问题,请不要在生产中使用它。正则表达式经常在不应该使用的情况下使用。如果您曾经使用过正则表达式,请查看其他选项

    有更好的选择,但至少有可能!

    【讨论】:

      【解决方案4】:

      你不需要正则表达式。

      最简单的方法是:

      var myStr = 'cocacola';
      var strHalf = myStr.length / 2;
      var array = [myStr.substr(0, strHalf),myStr.substr(strHalf, myStr.length)];
      

      jsfiddlehttps://jsfiddle.net/cudg8qc3/

      【讨论】:

        【解决方案5】:

        您可以只slice 字符串并将第一个元素放在数组的第一个槽中,将第二个元素放在第二个槽中。

        var str_len = myStr.length
        var my_array = [myStr.slice(0, str_len/2), myStr.slice(str_len/2, str_len)] 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多