如何在数组上使用preg_replace整体

时间:2017-07-21 16:08:37

标签: javascript php jquery html

我有两个问题,第一个

<?php
$text = "a iKo SaioT eeee";
$fonts = "a|i|u|e|o";
$newText = preg_replace("#([$fonts].+?(?=[^$fonts![:space:]]))#us", '<b>$1</b>', $text);
echo $newText;
?>

将会是( a K o S aio T eeee)。不是( a K o S aio T eeee )。为什么最后一个eeee字母不会改变粗体?当$text = "a"结果不会变成粗体时

其次,如何将此代码转换为jquery

$newText = preg_replace("#([$fonts].+?(?=[^$fonts![:space:]]))#us", '<b>$1</b>', $text);

原因$fonts是php中的数组不相同

1 个答案:

答案 0 :(得分:0)

在下面的javascript片段中,您会注意到它会从DIV中获取文本。

然后基于fonts变量构造RegExp模式。

当在替换中使用该模式时,它会在所有小写字母组周围添加粗体标记。

然后div中的文本被替换为。

&#13;
&#13;
var element = $('#test span:first');
let oldText = element.text();    

let fonts = "aiueo";
let pattern = new RegExp('(['+ fonts +']+)','g');

let newText = oldText.replace(pattern, '<b>$1</b>');

element.replaceWith(newText);

console.log("pattern: "+ pattern);
console.log("oldText: "+ oldText);
console.log("newText: "+ newText);

var arabictest=" test\n لَسْتَ فِي وَسَطِ الصَّلَاةِ فَاطْمَئِنَّ، وَافْتَرِشْ فَخِذَكَ الْيُسْرَى ثُمَّ  تَشَهَّدْ \n test";
console.log(arabictest.replace(/([\u0600-\u06FF]+(?:\s+[\u0600-\u06FF]+)*)/g, '<b>$1</b>'));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="test"><span>a iKo SaioT eeee</span></div>
&#13;
&#13;
&#13;

请注意,图案中没有使用管道 因为在字符类[a|b]中,管道只是另一个字符,而不是(a|b)中的正则表达式。

至于PHP。
与PHP(使用PCRE正则表达式引擎)中使用的语法相比,javascript中的正则表达式语法(或者受Perl 4启发)更加有限。 因此可以假设为javascript编写的任何正则表达式模式也适用于PHP。

实施例:

<?php
$text = "a iKo SaioT eeee";
$fonts = "aiueo";
$pattern = "/([$fonts]+)/";
$newText = preg_replace($pattern, "<b>$1</b>", $text);
echo $newText;
echo "<br/><br/>";

$text2 = "fie faa fuu foo bar foobar";
$words = "foo|bar";
echo preg_replace("/$words/", "<b>$0</b>", $text2);
echo "<br/>";
echo preg_replace("/\b($words)\b/", "<b>$1</b>", $text2);

$arabictext = "test <br/> لَسْتَ فِي وَسَطِ الصَّلَاةِ فَاطْمَئِنَّ، وَافْتَرِشْ فَخِذَكَ الْيُسْرَى ثُمَّ  تَشَهَّدْ  <br/> test";
echo preg_replace("%([\u{0600}-\u{06FF}]+(?:\s+[\u{0600}-\u{06FF}]+)*)%u", "<b>$1</b>", $arabictext);