Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript删除特定字符前的字符串_Javascript_String - Fatal编程技术网

javascript删除特定字符前的字符串

javascript删除特定字符前的字符串,javascript,string,Javascript,String,我一直在寻找,但只能找到我的问题的变化 我需要删除字符前的字符串(包括字符以及字符前后的空格)。字符串每次都会不同,而且不可预测,因此无论它是什么,都需要从DOM中删除它。因此,如果这是输出: <h2>Birds - Norwegian Yellow Finch</h2> <h2>Cats - Domestic Shorthaired Tabby</h2> <h2>Dogs - Alaskan Husky Cross</h2>

我一直在寻找,但只能找到我的问题的变化

我需要删除字符前的字符串(包括字符以及字符前后的空格)。字符串每次都会不同,而且不可预测,因此无论它是什么,都需要从DOM中删除它。因此,如果这是输出:

<h2>Birds - Norwegian Yellow Finch</h2>
<h2>Cats - Domestic Shorthaired Tabby</h2>
<h2>Dogs - Alaskan Husky Cross</h2>
鸟类-挪威黄雀
猫-家养短毛斑猫
狗-阿拉斯加哈士奇十字

如何删除“鸟、猫、狗”?不要对这些词(鸟、猫、狗)太过具体,因为它们会改变。如果需要,破折号(-)可以是不同的字符(即:*。

这里有一个不使用正则表达式的解决方案:

下面是一个使用正则表达式的示例,根据您的数据,它可能更有用,也可能不更有用:


两者都使用jQuery,但应该直接更改为纯JavaScript。

您可以使用一个简单的
RegExp
来解决这个问题

HTML:

<h2>Birds - Norwegian Yellow Finch</h2>
<h2>Cats - Domestic Shorthaired Tabby</h2>
<h2>Dogs - Alaskan Husky Cross</h2>​
var re = /^[^-]+-\s*/;

function processText(el) {
    el.textContent = el.textContent.replace(re, '');
}

var elements = ​document.getElementsByTagName('h2')​​​​;

for(var i = 0, l = elements.length; i < l; i++) {
    processText(elements[i]);
}​
鸟类-挪威黄雀
猫-家养短毛斑猫
狗-阿拉斯加哈士奇十字​
JavaScript:

<h2>Birds - Norwegian Yellow Finch</h2>
<h2>Cats - Domestic Shorthaired Tabby</h2>
<h2>Dogs - Alaskan Husky Cross</h2>​
var re = /^[^-]+-\s*/;

function processText(el) {
    el.textContent = el.textContent.replace(re, '');
}

var elements = ​document.getElementsByTagName('h2')​​​​;

for(var i = 0, l = elements.length; i < l; i++) {
    processText(elements[i]);
}​
var re=/^[^-]+-\s*/;
函数processText(el){
el.textContent=el.textContent.replace(re.);
}
变量元素=​document.getElementsByTagName('h2')​​​​;
for(var i=0,l=elements.length;i

以下循环遍历所有h2元素,并通过正则表达式替换删除开头:

window.onload = function() {
    var h2s = document.getElementsByTagName("h2"),
        i;

    for (i=0; i < h2s.length; i++)
        h2s[i].innerHTML = h2s[i].innerHTML.replace(/^[^-]+ - /,"");​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
};
演示:

如果将函数传递给
.text()
jQuery将为每个元素调用该函数,并将元素的旧(当前)值传递给它,因此不需要
.each()
循环


(同样,如果将代码放在正文末尾的脚本块中,则不需要文档就绪处理程序。)

谢谢。我应该提到,字符串有时可能不止一个单词。这是一个容易的调整吗?在“onload处理程序”中会是什么样子?(这里是javascript初学者)我更新了我的答案,展示了一种编写
onload
处理程序的方法,并进一步解释了为什么需要它。此外,我稍微调整了正则表达式,使其在连字符之前可以处理多个单词(请注意,其他一些答案可能已经处理了这种可能性)。演示也更新了。再次感谢。我已经把你的代码包好了,什么也没发生。现在感觉自己像一个超级面条:(我错过了什么?我不知道你错过了什么。我想也许我有打字错误或什么的,但是从我的答案复制粘贴到JSFIDLE中使用了
标记在这里:如果你放一些简单的东西,比如
警报(“测试”);
它能工作吗?好吧,多奇怪。这是有效的(从您最新的演示中复制):
var h2s=document.getElementsByTagName(“h2”),i;for(i=0;i
但不是这个(来自早期演示):
var h2s=document.getElementsByTagName(“h2”),i;for(i=0;i我看不出有什么不同。谢谢。在页面加载时立即进行调整是否容易?您的演示显示“运行它”这很好…但我是一个javascript初学者,不知道如何让它自己运行。直接执行
onclick
处理程序的主体。我现在也看到,您的代码允许轻松更改要应用函数的元素(一个地方更改“h2”)。谢谢。我喜欢Jquery选项,因为多年来我使用了很多插件,所以语法比较熟悉。我需要在上面使用它的页面实际上已经加载了Jquery库。您的示例非常完美,因为有时候会有多个单词,而且可能会出现第二个单词d dash。但是我已经把你的代码打包好了,什么也没发生。现在感觉自己像个超级傻瓜:(我缺少什么?(我也加载了jquery库)你可能需要确保它在页面加载完成后运行。所以你应该做
$(document)。ready(function(){//code here})
对于这个初学者来说仍然不起作用。以下是我的建议:你错过了函数的结尾部分。
使用正确的缩进来捕捉这些东西,并查看Chrome/Firefox中的JavaScript控制台来找出问题所在。这是一个固定的解决方案(还需要将其设置为使用jQuery):
$(document).ready(function(){
    $("h2").text(function(i, oldVal) {
        return oldVal.replace(/^[^-]+ - /,"");
    });
});