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

时间:2017-09-22 12:08:31

标签: 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,strHalf}/g);
// Only this will work fine
var myArray = myStr.match(/.{1,4}/g);

5 个答案:

答案 0 :(得分:3)

您可以执行String.slice()来解决此问题



var myStr = 'cocacola';

let len = myStr.length;

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




答案 1 :(得分:0)

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

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

......但要小心这样做;如果strHalf是包含/等特殊字符的字符串,那么您的RegExp会有奇怪的行为。

答案 2 :(得分:0)

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

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

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

众所周知,这会引入很多安全问题,请不要在生产中使用它。当他们不应该使用正则表达式时经常使用它们。如果您使用正则表达式,请查看其他选项

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

答案 3 :(得分:0)

你不需要正则表达式。

最简单的方法是:

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

jsfiddle https://jsfiddle.net/cudg8qc3/

答案 4 :(得分:0)

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

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