Javascript正则表达式匹配并从字符串中获取值

时间:2017-06-17 20:46:48

标签: javascript regex

我有一串文字,里面可以有特定的标签。 示例:var string = '<pause 4>This is a line of text.</pause><pause 7>This is the next part of the text.</pause>';

我要做的是对<pause #></pause>标记进行正则表达式匹配。 对于找到的每个代码,在这种情况下,它是<pause 4></pause><pause 7></pause>。我想要的是获取值47,以及字符串长度除以<pause #>...</pause>标记之间的字符串。

我现在所拥有的并不多。 但我无法弄清楚如何抓住所有案例,然后循环遍历每个案例并获取我正在寻找的值。

我的功能现在看起来像这样,它并不多:

/**
* checkTags(string)
* Just check for tags, and add them
* to the proper arrays for drawing later on
* @return string
*/
function checkTags(string) {

    // Regular expresions we will use
    var regex = {
        pause: /<pause (.*?)>(.*?)<\/pause>/g
    }

    var matchedPauses = string.match(regex.pause);

    // For each match
      // Grab the pause seconds <pause SECONDS>
      // Grab the length of the string divided by 2 "string.length/2" between the <pause></pause> tags
      // Push the values to "pauses" [seconds, string.length/2]

    // Remove the tags from the original string variable

    return string;


}

如果有人能解释我如何做到这一点,我将非常感激! :)

3 个答案:

答案 0 :(得分:1)

#!/bin/python import sys userFile=sys.argv[1] f = open(userFile, 'r') fileInfo=f.read() sys.stdout.write(fileInfo) sys.stdout.flush() f.close 无法保存子群,您需要match(/.../g)exec来执行此操作。这是一个基于replace的辅助函数的示例,用于获取所有匹配项:

replace

由于您无论如何都要删除标记,因此您也可以直接使用function matchAll(re, str) { var matches = []; str.replace(re, function() { matches.push([...arguments]); }); return matches; } var string = '<pause 4>This is a line of text.</pause><pause 7>This is the next part of the text.</pause>'; var re = /<pause (\d+)>(.+?)<\/pause>/g; console.log(matchAll(re, string))

答案 1 :(得分:1)

您需要创建一个循环以在文本中查找RegExp模式的所有匹配组。 匹配的组是一个包含原始文本,匹配值和匹配文本的数组。

&#13;
&#13;
var str = '<pause 4>This is a line of text.</pause><pause 7>This is the next part of the text.</pause>';


function checkTags(str) {

    // Regular expresions we will use
    var regex = {
        pause: /<pause (.*?)>(.*?)\<\/pause>/g
    }
    var matches = [];
    while(matchedPauses = regex.pause.exec(str)) {
      matches.push([matchedPauses[1], matchedPauses[2].length /2]);
    };

    return matches;

}

console.log(checkTags(str));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

作为一个起点,因为你到目前为止还没有多少,你可以试试这个

/<pause [0-9]+>.*<\/pause>/g

比使用

再次匹配数字
/[0-9]+>/g

摆脱最后一个标志&gt;

str = str.slice(0, -1);