Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 重复正则群_Jquery_Regex - Fatal编程技术网

Jquery 重复正则群

Jquery 重复正则群,jquery,regex,Jquery,Regex,我有一个这样的模式,它匹配多组值: (((\w+) (\d+))+) 我认为这与: one 1 two 2 three 3 four 4 five 5 但是因为我不知道有多少次重复,我不知道在输出中输入什么 例如,我需要将结果转化为如下内容: <span class="one">1</span> <span class="two">2</span> <span class="three">3</span> <spa

我有一个这样的模式,它匹配多组值:

(((\w+) (\d+))+)
我认为这与:

one 1 two 2 three 3 four 4 five 5
但是因为我不知道有多少次重复,我不知道在输出中输入什么

例如,我需要将结果转化为如下内容:

<span class="one">1</span>
<span class="two">2</span>
<span class="three">3</span>
<span class="four">4</span>
<span class="five">5</span>
/(((\w+) (\d+))+)/ig, "<span class=\"$3\">$4</span>"
比如说:

<span class="one">1</span>
<span class="two">2</span>
<span class="three">3</span>
<span class="four">4</span>
<span class="five">5</span>
/(((\w+) (\d+))+)/ig, "<span class=\"$3\">$4</span>"
不起作用,因为我需要创建数量可变的跨度元素

这里有我遗漏的东西吗


谢谢

我想在这种情况下,您只需要按空格进行分割:

s = "one 1 two 2 three 3 four 4 five 5";

// Replace runs of whitespace with a single space, and trim...
s.replace(/\s+/g, ' ');
s.replace(/^\s+|\s+$/g, '')

// And split string into an array
var parts = "one 1 two 2 three 3 four 4 five 5".split(' ')

for (var i=0; i<parts.length; i++){

    // Get your pieces
    var name = parts.shift();
    var num = parseInt(parts.shift());

    // Create your span
    var span = $('<span></span>').attr('class', name).text(num);

}

我想在这种情况下,你只需要用空格分开:

s = "one 1 two 2 three 3 four 4 five 5";

// Replace runs of whitespace with a single space, and trim...
s.replace(/\s+/g, ' ');
s.replace(/^\s+|\s+$/g, '')

// And split string into an array
var parts = "one 1 two 2 three 3 four 4 five 5".split(' ')

for (var i=0; i<parts.length; i++){

    // Get your pieces
    var name = parts.shift();
    var num = parseInt(parts.shift());

    // Create your span
    var span = $('<span></span>').attr('class', name).text(num);

}

你的问题没有给出答案吗?我只是在用javascript控制台进行测试:

>>> "one 1 two 2 three 3 four 4 five 5".replace(/(((\w+) (\d+))+)/ig, "<span class=\"$3\">$4</span>")
<span class="one">1</span> <span class="two">2</span> <span class="three">3</span> <span class="four">4</span> <span class="five">5</span>

>>> "one 1 two 2 three 3 four 4".replace(/(((\w+) (\d+))+)/ig, "<span class=\"$3\">$4</span>" )
<span class="one">1</span> <span class="two">2</span> <span class="three">3</span> <span class="four">4</span>

>>> "one 1 two 2 three 3".replace(/(((\w+) (\d+))+)/ig, "<span class=\"$3\">$4</span>" )
<span class="one">1</span> <span class="two">2</span> <span class="three">3</span>

>>> "one 1 two 2 three 3 foo five 5".replace(/(((\w+) (\d+))+)/ig, "<span class=\"$3\">$4</span>" )
<span class="one">1</span> <span class="two">2</span> <span class="three">3</span> foo <span class="five">5</span>
它似乎正是你想要的

编辑:原始答案如下;我错过了jquery标签,以为这是一个regexp问题

不要试图一次将它们全部匹配;让/g来处理这个

bash$ echo "one 1 two 2 three 3 four 4 five 5" | \
      sed -e 's/\([[:alpha:]]\+\)\s*\([[:digit:]]\+\)\s*/<span class="\1">\2<\/span>\n/g'

<span class="one">1</span>
<span class="two">2</span>
<span class="three">3</span>
<span class="four">4</span>
<span class="five">5</span>

你的问题没有给出答案吗?我只是在用javascript控制台进行测试:

>>> "one 1 two 2 three 3 four 4 five 5".replace(/(((\w+) (\d+))+)/ig, "<span class=\"$3\">$4</span>")
<span class="one">1</span> <span class="two">2</span> <span class="three">3</span> <span class="four">4</span> <span class="five">5</span>

>>> "one 1 two 2 three 3 four 4".replace(/(((\w+) (\d+))+)/ig, "<span class=\"$3\">$4</span>" )
<span class="one">1</span> <span class="two">2</span> <span class="three">3</span> <span class="four">4</span>

>>> "one 1 two 2 three 3".replace(/(((\w+) (\d+))+)/ig, "<span class=\"$3\">$4</span>" )
<span class="one">1</span> <span class="two">2</span> <span class="three">3</span>

>>> "one 1 two 2 three 3 foo five 5".replace(/(((\w+) (\d+))+)/ig, "<span class=\"$3\">$4</span>" )
<span class="one">1</span> <span class="two">2</span> <span class="three">3</span> foo <span class="five">5</span>
它似乎正是你想要的

编辑:原始答案如下;我错过了jquery标签,以为这是一个regexp问题

不要试图一次将它们全部匹配;让/g来处理这个

bash$ echo "one 1 two 2 three 3 four 4 five 5" | \
      sed -e 's/\([[:alpha:]]\+\)\s*\([[:digit:]]\+\)\s*/<span class="\1">\2<\/span>\n/g'

<span class="one">1</span>
<span class="two">2</span>
<span class="three">3</span>
<span class="four">4</span>
<span class="five">5</span>

以下内容在VIM中起作用

:%s/\(\w\+\) \(\d\+\)/<span class="\1">\2<\/span>\r/ig

类似的功能应该可以在jquery中使用。

以下功能可以在VIM中使用

:%s/\(\w\+\) \(\d\+\)/<span class="\1">\2<\/span>\r/ig

类似的方法在jquery中也应该适用。

为什么不将它们放在一个数组中呢?如果您实际上是在用数字创建一组跨度,那么这样做更有意义:

var arr = ['one','two','three','four','five','six','seven','eight','nine','ten'];

$.each(arr, function(i, val) {
   var $span = $('<span></span>').attr('class', val).text(i+1);
   $('#someDiv').append($span);
});

为什么不把它们放在一个数组中呢?如果你实际上是在用数字创建一组跨距,这就更有意义了:

var arr = ['one','two','three','four','five','six','seven','eight','nine','ten'];

$.each(arr, function(i, val) {
   var $span = $('<span></span>').attr('class', val).text(i+1);
   $('#someDiv').append($span);
});

不要尝试重复匹配,只需使用\w+\d+并多次重复替换,这就是g全局替换标志所做的

注意:您的i标志是多余的,因为\w包括这两种情况,\d只是数字

假设页面设置的所有其他部分都正确,并且$j是jQuery对象,这将按需要工作:

var MyText = $j(something).text();

HtmlContent = MyText.replace( /(\w+) (\d+)/g , '<span class="$1">$2</span>' );

$j(something).html( HtmlContent );

不要尝试重复匹配,只需使用\w+\d+并多次重复替换,这就是g全局替换标志所做的

注意:您的i标志是多余的,因为\w包括这两种情况,\d只是数字

假设页面设置的所有其他部分都正确,并且$j是jQuery对象,这将按需要工作:

var MyText = $j(something).text();

HtmlContent = MyText.replace( /(\w+) (\d+)/g , '<span class="$1">$2</span>' );

$j(something).html( HtmlContent );

您缺少的是您的正则表达式与整个字符串相匹配,而您希望逐段替换它:

/\w+\d+/匹配五个5或一个1,但不是一个1和2 /?:\w++\d++/匹配一个1或一个1两个2或一个1两个2三个3,以此类推 +与前面的模式匹配1次或多次

旁注:?:。。。就像。。。除此之外,它没有将任何内容捕获到$1、$2等中,它只是将内容分组

因此,对于您的问题,您只需要删除+:


每当模式匹配时,/g全局标志将负责重复替换。

您缺少的是正则表达式与整个字符串匹配,而您希望逐段替换它:

/\w+\d+/匹配五个5或一个1,但不是一个1和2 /?:\w++\d++/匹配一个1或一个1两个2或一个1两个2三个3,以此类推 +与前面的模式匹配1次或多次

旁注:?:。。。就像。。。除此之外,它没有将任何内容捕获到$1、$2等中,它只是将内容分组

因此,对于您的问题,您只需要删除+:


/g全局标志将负责在每次模式匹配时重复您的替换。

是因为我,还是因为我才这样做?是因为我,还是因为我才这样做?您好,您能解释一下这里发生了什么吗?因为我一点也不懂,所以不能适应。谢谢我在支持正则表达式的VI编辑器中尝试了这个方法,它很有效。我不知道jquery是什么,但我希望它能在那里工作。它基本上是/\w+\d+/\2/ig,为vi editorHi提供了适当的转义,你能解释一下这里发生了什么吗?因为我一点也不懂,所以不能适应。谢谢我在支持正则表达式的VI编辑器中尝试了这个方法,它很有效。我不知道jquery是什么,但我希望它能在那里工作。它基本上是/\w+\d+/\2/ig,为vi编辑器提供了适当的转义。我不是,这只是一个示例,需要学习如何将元素数与regex中的重复数同步。对不起,我不是,这只是一个示例,需要学习如何将元素数与regex中的重复数同步。你可能是对的,我很愚蠢吗?0.o将进行更多测试并回复您,谢谢!它是有效的,但只有b/c正则表达式不能解释对之间的空间。你可能是对的,我是不是很蠢?0.o将进行更多测试并回复您,谢谢!它可以工作,但只有b/c正则表达式不考虑对之间的空间。正确:正则表达式一次只需匹配一对令牌;是正则表达式引擎对匹配项进行迭代;这是注册号
对匹配项进行迭代的ex引擎。这很好。多亏了你,我才能够构建:ThisGuyRocksHard.replace/^[A-Z]?.*?[A-Z]/g,'1$2_$3',这正是我所需要的。不过,我还是很困惑。如果我想将字符串中的所有大写字母收集到全局变量中,该怎么办?我尝试了/^[A-Z]?:.*[A-Z]+//在最外层的捕获组的内部和外部使用+键。。。但是没有用。重复比赛分组很难!你想要所有的大写字母吗?ThisgyRockShard。替换/[^A-Z]/g;//TGRH或thisgyrockshard.match/[A-Z]/g/['T','g','R','H']哈哈,是的。有趣的是,除了第一个,我真的想要所有的。我最终使用了我第一次想到的方法,然后换掉了“T”。这很好。多亏了你,我才能够构建:ThisGuyRocksHard.replace/^[A-Z]?.*?[A-Z]/g,'1$2_$3',这正是我所需要的。不过,我还是很困惑。如果我想将字符串中的所有大写字母收集到全局变量中,该怎么办?我尝试了/^[A-Z]?:.*[A-Z]+//在最外层的捕获组的内部和外部使用+键。。。但是没有用。重复比赛分组很难!你想要所有的大写字母吗?ThisgyRockShard。替换/[^A-Z]/g;//TGRH或thisgyrockshard.match/[A-Z]/g/['T','g','R','H']哈哈,是的。有趣的是,除了第一个,我真的想要所有的。我最终使用了我第一次想到的方法,然后换掉了“T”。