从用户输入字符串添加对数组的引用

时间:2014-01-18 00:51:08

标签: javascript jquery

如何在匹配的单词(包括正则表达式中的匹配单词)之后直接获取引用

实施例

var refArray = [];
var str = "matt 25:5 hello foo bar matt 5:10"; // unknown information
var pattern = "matt"; // looped through an object to get pattern

var regex = new RegExp(pattern,"gi");
var matches = str.match(regex); // check for any name matches 

if(matches){
    /*
        This is where I get stuck
        Get the numbers right after each match 
        and place both name and number into a variable AKA. result
    */
    refArray.push($result);
}
// The refArray should output [matt 25:5, matt 5:10]

感谢您的帮助,非常感谢

修改

我希望能够匹配所有参考可能性AKA示例...... 马特|马特5 |马太福音5:5 |马太福音5:5-10 |马太福音5:5-10,12 |马太福音5:5-10,12-14

修改

这是我提出的正则表达式here

我正在尝试匹配所有可能的引用

  亚光
  亚光5
  亚光5,6,7   亚光5:5
  亚光5:5-10
  亚光5:5-10,16,
  亚光5:5-10,16-20,18-20
  亚光5-6

根据我所在的网站,但是当我将代码粘贴到我的页面时,它仍然只提供了名称。

正则表达式是......

(matt( \d*(\:\d*)?(\-\d*)?((, (\d*\-)?\d*)?)+)?(?!\w))

我做错了什么?

3 个答案:

答案 0 :(得分:1)

我认为这就是你想要的

var refArray = [];
var str = "matt 25:5 hello foo bar matt 5:10";
var pattern = "matt \\d+:\\d+";

var regex = new RegExp(pattern,"gi");
refArray = str.match(regex);

alert(refArray);
// The result is [matt 25:5, matt 5:10]
  • 来自Mozilla的文档说,函数match返回匹配的字符串数组或返回null,不匹配字符串。
  • 您似乎尝试将字符串与matt匹配,然后跟number:number匹配。与此字符串匹配的正则表达式应为matt \d+:\d+

答案 1 :(得分:1)

这是我用于此类正则表达式匹配的函数。它需要一个字符串,一个带捕获组的正则表达式,一个可以访问这些组的回调。 this是一个分配匹配项的对象,以及return this输出对象:

function matchAll(str, regex, fn) {
  var result = [];
  str.replace(regex, function() {
    var args = [].slice.call(arguments, 1);
    result.push(fn.apply([], args));
  });
  return result;
}

var str = 'matt 25:5 hello foo bar matt 5:10';
var name = 'matt';
var regex = RegExp('('+ name +') (\\d+:\\d+)', 'gi');

var result = matchAll(str, regex, function(name, number) {
  this.push(name, number);
  return this;
});
//^
// [
//   ['matt', '25:5']
//   ['matt', '5:10']
// ]

答案 2 :(得分:0)

好的经过几天的努力,我找到了自己的解决方案......感谢您的帮助...

var pattern = '([0-9][ ]|[0-9]?)([a-z]+)([.]?[ ]?)((([0-9]{1,3})(:[0-9{1,3}](-[0-9]{1,3})*)*([-, ?])*)+)';
var rxref = new RegExp(pattern, "gi");
var refArray = str.match(rxref); // get the match with digits and put them inside an array