Javascript,如何使用正则表达式解析字符串

时间:2019-06-28 06:49:35

标签: javascript regex

我有多个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,但这仅适用于开始部分。也许是一些正则表达式,但我不知道如何。

我将竭诚为您服务

5 个答案:

答案 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块内的内容,

就像正则表达式具有捕获括号一样,对所有与每个捕获括号匹配的字符串的引用都可以通过使用$符号后跟括号的位置来访问