通过匹配js中的字符来对字符串和单词进行条件分割

时间:2018-01-11 03:22:58

标签: javascript string

我有一个非常长的字符串,其中包含html作为字符串,数字,我的特殊绑定和数字我想分开我的绑定和句子,但我的程序分别是我的绑定和单词。

我的js代码: -

var x = 'hey this is {{name}}    and I love to  {{write}} and to learn as 
much as I can. Now I am trying to separate sentences and my bindings'

var c  = x.match(/\s*\S*\s*/g) // this splits words from string including 
   space

var mt = x.match(/{(.*)}/g); // trying to  take out bindings but this don't 
 work

mt.forEach(function(a){     // taking each bindings separately 
  var z = x.match(a) 
})

console.log(mt)

这样的事情..但我知道这是完全错误的,请帮助我 我不知道: -

我期待的输出: -

(5) ["hey this is", "i", "{{name}}", "    and I love to  ", "{{write}}", " and to learn as ↵ much as I can. Now I am trying to separate sentences and my bindings"]

我该怎么做?

请不要使用jquery

1 个答案:

答案 0 :(得分:1)

试试这个:
我已经对我的代码进行了评论,希望它能让您更容易阅读。 但请注意,此代码远非完美,但它可以解决您的问题。

var rawString = 'hey this is {{name}}    and I love to  {{write}} and to learn as much as I can. Now I am trying to separate sentences and my bindings';
var arrayRawString  = rawString.match(/\s*\S*\s*/g); // this splits words from string including space
var arrayPlaceholder = rawString.match(/{(.\S*)}+/g); // trying to  take out bindings but this don't work

// to store the final output
var separedArray = [];

// keeping track of the index to stich the array up
var posStart = 0;
var posEnd = 0;

arrayPlaceholder.forEach(function(arg){     // taking each bindings separately 

  // length of the array that holds placeholder (bindings)
  var arsLength = arrayRawString.length;

  for(var i = 0; i < arsLength; ++i) { 

    // if the provided text matches the original array's element
    if(arrayRawString[i].match(arg)){

      // to store the index
      posEnd = arrayRawString.indexOf(arrayRawString[i]);

      // join the pieces together upto the index defined
      var res = arrayRawString.slice(posStart, posEnd).join('');

      // to indicate whether the stored string is the placeholder
      var flag = true;

      // store the string obtained
      separedArray.push(res.replace(arrayPlaceholder[(arrayPlaceholder.indexOf(arg) - 1) < 0 ? 0 : arrayPlaceholder.indexOf(arg) - 1 ], ''));

      // check if the string still has placeholder (bindings)
      // to remove it
      for(var j = 0; j < arg.length; ++j) {
          if(res[j] !== arg[j]) {
            flag = !flag;
          }
      }

      if ( flag ) {
        separedArray.push(arg);
      }

      // last end position is the start position for next round
      posStart = posEnd;

      // because the loop runs only arrayPlaceholder.length times
      // it solves the problem of last part not getting pushed to the final array
      if( arrayPlaceholder[arrayPlaceholder.length-1] === arg ) {
        res = arrayRawString.slice(posStart, arrayRawString.length).join('');
        separedArray.push(res.replace(arg, ''));
      }
    }
  }

});

console.log(separedArray);