我有多个ip
的字符串,我需要用
替换它
<div class="container">
{if count($row_services) == 0}
No services published.
{else}
{assign var=i value=0}
{foreach from=$row_services item=row}
<div class="row scroll-animated-from-bottom {if $i > 0}padding-top-50{/if}" id="service-data-1">
{if ($i % 2 == 0)}
<div class="col-sm-6">
<h3 class="padding-bot-20">{$row->service}</h3>{$row->content}
</div>
<div class="col-sm-6">
<img class="img-responsive" src="{$this->images->frontend_check_image($row->main_image)}" alt="Service">
</div>
{else}
<div class="col-sm-6">
<img class="img-responsive" src="{$this->images->frontend_check_image($row->main_image)}" alt="Service">
</div>
<div class="col-sm-6">
<h3 class="padding-bot-20">{$row->service}</h3>{$row->content}
</div>
{/if}
</div>
{capture assign=i}{$i+1}{/capture}
{/foreach}
{/if}
</div>
和{{Start:SomeName}}
至<div data-name="SomeName"></div>
我正在尝试使用{{End:SomeName}}
这样的replace,但这仅适用于开始部分。也许是一些正则表达式,但我不知道如何。
我将竭诚为您服务
答案 0 :(得分:2)
类似这样的事情应该可以解决:
const input = '{{Start:SomeName}}{{Start:SomeName}} {{End:SomeName}} {{End:SomeName}}'
const result = input.replace(/{{(.+?):(.+?)}}/g, '<div data-name="$2"></div>')
console.log(result)
答案 1 :(得分:2)
也许符合这些原则
const str = '{{Start:SomeName}} hello {{End:SomeName}} {{Start:AnotherName}} world {{End:AnotherName}}';
const replaced = str.replace(/{{Start:(\w+)}}(.*){{End:(\1)}}/g, (_, name, content) => {
return `<div data-name="${name}">${content}</div>`;
});
console.log(replaced);
答案 2 :(得分:1)
使用类似于字符串的结构,将slice()
和split()
放入变量可能更容易:
let s = "{{Start:SomeName}}"
let [side, name] = s.slice(2, -2).split(':')
let tag = `<div data-name="${name}"></div>`
console.log(tag)
如果其中有多个,则可以使用正则表达式在replace()
中找到它们,并在传递给replace()
的replacer函数中使用以上思想来计算替换值:
let s = "Some text {{Start:SomeName}} some other text {{End:SomeName}}{{Start:SomeName}}more{{End:SomeName}}"
let n = s.replace(/{{(.*?)}}/g, (match, s) => {
let [side, name] = s.split(':')
if (side === "Start") return `<div data-name="${name}">`
else if (side === "End") return '</div>'
})
console.log(n)
答案 3 :(得分:0)
result = "{{Start:SomeName}}{{Start:SomeName}} {{End:SomeName}} {{End:SomeName}} ".replace(/{{Start:(\w+)}}|{{End:(\w+)}}/g,(...a)=>{
if(a[1]){
return `<div data-name="${a[1]}">`
}
else{
return `</div>`
}
})
console.log(result)
答案 4 :(得分:0)
您可以像下面一样使用RegEx
var re = /\{\{Start:(.*)\}\}(.*)\{\{End:(.*)\}\}/g;
var chaine = "{{Start:SomeName}}Hello World{{End:SomeName}}"
var output = chaine.replace(re,"<div date-name='$1'>$2</div>");
console.log(output)
正则表达式中的第一个括号捕获了将被设置为属性data-name
的值的名称,第二个捕获了包含在START
块和END
块内的内容,
就像正则表达式具有捕获括号一样,对所有与每个捕获括号匹配的字符串的引用都可以通过使用$
符号后跟括号的位置来访问