【问题标题】:How can I strip text from string?如何从字符串中删除文本?
【发布时间】:2012-12-16 18:20:18
【问题描述】:

我有一个变量保存单行字符串,它是这样的 html 元素。

var des = "<p> --Sometext before-- FI: This is fi name, This is fi manufacturer <br /> SE:This is se name, This is se manufacturer <br /> EN: This is en name, This is en manufacturer</p>";

我想选择 FI 之后的所有内容:直到逗号符号进入一个变量,逗号符号之后直到
标记进入另一个变量。 SE: 和 EN: 也一样。

例如,结果会是这样的。

    var fi_name         = "This is fi name";
    var fi_manufacturer = "This is fi manufacturer";
    var se_name         = "This is se name";
    var se_manufacturer = "This is se manufacturer";
    var en_name         = "This is en name";
    var en_manufacturer = "This is en manufacturer";

注意,字符串是动态变化的,但仍然有相同的模式。

例如:

<p> --Sometext before-- FI:[name],[manufacturer]<br/ >SE:[name],[manufacturer]<br/ >FI:[name],[manufacturer]</p>

您可以在JsFiddle 中查看演示。

现在它抛出空错误。

已编辑 v v v

它不适用于实时网站。 des 变量完全像这样。 请看http://jsfiddle.net/AM8X2/它又在抛出null。

【问题讨论】:

  • 使用您在 jsfiddle 中添加的代码更新问题。
  • jsfiddle.net/raPDd/1是你想要的吗?
  • 没有。这几乎是我想要的,但名称和制造商必须分成变量

标签: javascript string null substring match


【解决方案1】:

您可以只查找指定的模式并从中提取相关信息:

var des = "<p>FI: This is fi name, This is fi manufacturer <br /> SE:This is se name, This is se manufacturer <br /> EN: This is en name, This is en manufacturer</p>";

var f = function(w, s) {
    return new RegExp(w + ':([^,]+)').exec(s)[1];
}

fi = f('FI', des);
se = f('SE', des);
en = f('EN', des);

w + ':([^,]+)'可以解释为:把sw的冒号后面的值拿给我

这是更新后的fiddle


一个更完整的解决方案,一个处理所有 HTML 标记的解决方案如下:

var f = function(w, s) {
    var el = document.createElement('div'), arr;
    el.innerHTML = s;

    arr = (new RegExp(w + ':([^\n]+)').exec(el.innerText)[1]).split(',');

    return {
        manufacturer: arr[1],
        name: arr[0]       
    }
}

fi = JSON.stringify(f('FI', des));
se = JSON.stringify(f('SE', des));
en = JSON.stringify(f('EN', des));

这个的小提琴是here

要在变量中访问这些中的任何一个(没有JSON.stringify(),直接方法返回,即f('SE', des)),您可以:

// for fi manufacturer
fi.manufacturer

// for en name
en.name

// etc..

在我看来,通过使用它,您可以采用更加模块化的方法,并且出错的机会更少。

【讨论】:

  • 感谢您的回复。但是制造商呢?它只显示名称。我也想要厂家。 :)
【解决方案2】:

我把你的 jsFiddle 改成了这个:

http://jsfiddle.net/11684/raPDd/4/

我在您的正则表达式中添加了大写字母、空格和逗号,因此它不会返回 null(因为未找到匹配项),其余部分都很好。
结果:

var fi,se,en;
var des = "<p>FI: This is fi name, This is fi manufacturer <br /> SE:This is se name, This is se manufacturer <br /> EN: This is en name, This is en manufacturer</p>";

var match = des.match(/<p>FI:([a-zA-Z ,]+)<br \/> SE:([a-zA-Z ,]+)<br \/> EN:([a-zA-Z ,]+)<\/p>/);
fi = match[1];
se = match[2];
en = match[3];

alert("[FI]: " + fi + "\n[SE]:" + se + "\n[EN]:" + en);​

编辑:
我没有看到您需要单独变量中的名称和制造商,我将小提琴:http://jsfiddle.net/11684/raPDd/5/ 编辑为:

var fi,se,en;
var des = "<p>FI: This is fi name, This is fi manufacturer <br /> SE:This is se name, This is se manufacturer <br /> EN: This is en name, This is en manufacturer</p>";

var match = des.match(/<p>FI:([a-zA-Z ,]+)<br \/> SE:([a-zA-Z ,]+)<br \/> EN:([a-zA-Z ,]+)<\/p>/);
fi = match[1];
se = match[2];
en = match[3];

//After that just split on the comma:

var fi_name = fi.split(",")[0];
var fi_manu = fi.split(",")[1];
var en_name = en.split(",")[0];
var en_manu = en.split(",")[1];
var se_name = se.split(",")[0];
var se_manu = se.split(",")[1];
​

【讨论】:

  • 它在现场不工作。请参阅 jsfiddle.net/AM8X2 以获取完整的 des 字符串。
【解决方案3】:

这是一个可能的解决方案:

var des = "<p> --Sometext before-- FI: This is fi name, This is fi manufacturer <br /> SE:This is se name, This is se manufacturer <br /> EN: This is en name, This is en manufacturer</p>";

​var matches = des.match( /([A-Z]{2}):\s*([^,]+?)\s*,\s*([^<$]+?)\s*(?=<|$)/g );

var results = [];

for ( var i = 0; i < matches.length; i++ ) {
    var res = matches[ i ].match( /([A-Z]{2}):\s*([^,]+?)\s*,\s*([^<$]+?)\s*(?=<|$)/ );
    var abbr = res[ 1 ].toLowerCase();

    results[ abbr + '_name' ] = res[ 2 ];
    results[ abbr + '_manufacturer' ] = res[ 3 ];
}

console.log( results );

​在这个小提琴中尝试一下:http://jsfiddle.net/bukfixart/QB5qu/

【讨论】:

  • 感谢您的回复。但我需要这些变量来使用不是数组。可以编辑吗?
  • @PakinaiKamolpus 请参阅我的答案。
猜你喜欢
  • 2020-10-13
  • 2022-01-16
  • 2016-07-13
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
相关资源
最近更新 更多