这是我的示例字符串:
<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的了解到此为止......
感谢您的帮助。
答案 0 :(得分:1)
正则表达式:
^.*\/\/(\S+)\s+#(\d+)([^,]*).*$
替换字符串:
$1 <i class="dn">$2<i>$3
<强>解释强>
^
断言我们刚开始。.*\/\/
它匹配//
(\S+)
非空格字符被捕获到一个组中。\s+#
一个或多个空格后跟#
符号。(\d+)
一个是更多的数字被捕获到另一个组。([^,]*)
捕获任何不属于,
零次或多次的字符。.*
匹配任何字符零次或多次。$
断言我们到底。 li>
答案 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>
RegEx说明:(为了未来读者的利益)
(.*)
- 第一个捕获组($1
),它匹配任意数量的非换行符(零个或多个)。对于上面的示例,这将等于<p>Whatever
。
([0-9]+(?=<))
- 第二个捕获组($2
),它是以一个数字字符(即0-9)开头的任何字符串,并且正向前看以捕获所有字符,直到{遇到{1}}个字符。对于上面的示例,这将等于<
。
591118
- 第三个捕获组((<.*)
),它基本上是以$3
开头的所有剩余字符。对于上面的示例,这将等于<
。