Javascript 如何在具有正则表达式模式的匹配方法中使用变量

Javascript 如何在具有正则表达式模式的匹配方法中使用变量,javascript,regex,match,Javascript,Regex,Match,我想从一个字符串中得到一个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,strHa

我想从一个字符串中得到一个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);
您可以使用String.slice()来解决这个问题

var myStr='cocacola';
设len=myStr.length;
让结果=[myStr.slice(0,len/2),myStr.slice(len/2)]
控制台日志(结果)您可以使用String.slice()来解决此问题

var myStr='cocacola';
设len=myStr.length;
让结果=[myStr.slice(0,len/2),myStr.slice(len/2)]

控制台日志(结果)您需要使用
RegExp()
构造函数并生成一个它能理解的字符串:

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

…但要小心这样做;如果
strHalf
是一个包含特殊字符(如
/
)的字符串,则您的RegExp将有奇怪的行为。

您需要使用
RegExp()
构造函数并生成一个它能理解的字符串:

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

…但要小心这样做;如果
strHalf
是一个包含特殊字符的字符串,如
/
,则您的RegExp将有奇怪的行为。

您可以使用RegExp构造函数创建一个非硬编码的RegExp:

var myArray = myStr.match(new RegExp('/.{1,'+strHalf+'}/g'));
构造函数不知道
strHalf
应该是整数,因此请确保您可以控制它

这会带来很多安全问题,请不要在生产中使用。正则表达式在不应该使用的时候太频繁了。如果你使用正则表达式,一定要考虑其他的选择


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

您可以使用regexp构造函数创建非硬编码的regexp:

var myArray = myStr.match(new RegExp('/.{1,'+strHalf+'}/g'));
构造函数不知道
strHalf
应该是整数,因此请确保您可以控制它

这会带来很多安全问题,请不要在生产中使用。正则表达式在不应该使用的时候太频繁了。如果你使用正则表达式,一定要考虑其他的选择


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

你不需要正则表达式

最简单的方法是:

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

jsfiddle

你不需要正则表达式

最简单的方法是:

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

jsfiddle

您可以对字符串进行
切片
并将第一个元素放置在数组的第一个插槽中,将第二个元素放置在数组的第二个插槽中

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

您可以对字符串进行
切片
并将第一个元素放置在数组的第一个插槽中,将第二个元素放置在数组的第二个插槽中

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

你为什么要用正则表达式呢?看看method,为什么需要正则表达式呢?看看method@poster您不“需要”使用regexp,但它确实是一个可行的选项。是的,根据问题标题,我认为这是@Gabriel可能想在其他地方使用的一种技术。@poster您不“需要”使用regexp,但它确实是一个可行的选项。是的,根据问题的标题,我认为这是@Gabriel可能想在其他地方使用的一种技术。