使用Jquery(或直接JS)查找和替换正则表达式

时间:2014-07-26 13:42:12

标签: javascript jquery regex

这是我的示例字符串:

<p>Whatever #591118</p>

这是我理想的输出:

p='<p>Whatever <i class="dn">591118<i></p>';

这是我想写的正则表达式:

r="(.*)#([0-9]+(?=<))(<.*)$";

如果我:

alert(p.match(r));

打印:

<p>Whatever #591118</p>,<p>Whatever ,591118,</p>

我在考虑将.replace'$1<i class="dn">$2<i>$3'

一起使用

但是我对正则表达式和jquery的了解到此为止......

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

正则表达式:

^.*\/\/(\S+)\s+#(\d+)([^,]*).*$

替换字符串:

$1 <i class="dn">$2<i>$3

DEMO

<强>解释

  • ^断言我们刚开始。
  • .*\/\/它匹配//
  • 之前的所有字符
  • (\S+)非空格字符被捕获到一个组中。
  • \s+#一个或多个空格后跟#符号。
  • (\d+)一个是更多的数字被捕获到另一个组。
  • ([^,]*)捕获任何不属于,零次或多次的字符。
  • .*匹配任何字符零次或多次。
  • $断言我们到底。

答案 1 :(得分:1)

您可以使用以下代码根据匹配的正则表达式替换部分原始字符串。代码(我认为)是自我解释的。

var regex = /(.*)#([0-9]+(?=<))(<.*)$/; 
var str = '<p>Whatever #591118</p>';
var toReplace = '$1<i class="dn">$2<i>$3'; 

var result = str.replace(regex, toReplace);
console.log(result);

输出: <p>Whatever <i class="dn">591118<i></p>

Demo

RegEx说明:(为了未来读者的利益)

(.*) - 第一个捕获组($1),它匹配任意数量的非换行符(零个或多个)。对于上面的示例,这将等于<p>Whatever

([0-9]+(?=<)) - 第二个捕获组($2),它是以一个数字字符(即0-9)开头的任何字符串,并且正向前看以捕获所有字符,直到{遇到{1}}个字符。对于上面的示例,这将等于<

591118 - 第三个捕获组((<.*)),它基本上是以$3开头的所有剩余字符。对于上面的示例,这将等于<