如何使用JavaScript或jQuery隐藏字符串中某个字符后面的内容

3
我有一个字符串,有时会包含连字符 (-),有时不会。当字符串包含连字符时,我想要删除或隐藏连字符及其后的所有文本。
例如,'john' 将被呈现为 'john'。而 'john-hops-over-the-candlestick' 也将被呈现为 'john'。

哇,有好几个好答案立刻出现了。不确定如何选择最好的,但我会在这里选择一分钟。我也意识到我需要使用 jQuery 循环遍历元素,然后通过 jQuery 的 text() 方法对每一个运行这个例程。 - Tony Brasunas
好的,很多答案都可以起作用,我选择了在我的jQuery中使用正则表达式,如下所示:$( "span.first-name").each(function() { $(this).text($(this).text().replace(/-.*$/, '')); }); - Tony Brasunas
2
我喜欢这种类型的问题,其中问题本身并不难解决,但你可以得到很多有趣的不同方法来完成同样的事情。(当然,只要是能够正确工作的答案。) - Troy Gizzi
4个回答

3
您可以使用简单的正则表达式替换。
myString.replace(/-.*$/, '')

例如

var myString = 'john';

alert('"' + myString + '" becomes "' + myString.replace(/-.*$/, '') + '"');

myString = 'john-hops-over-the-candlestick';

alert('"' + myString + '" becomes "' + myString.replace(/-.*$/, '') + '"');
                                                        


不适用于任何字符,但您可以使用 function breakAt(str, at){return str.replace(new RegExp(at+'.*$'), '');}。请注意,在创建 RegExp 时必须使用 new RegExp() 来执行字符串的连接。 - StackSlave
1
@PHPglue 是的,但问题显然并没有要求“任何字符”。 - Phil

2

试试这个:

function breakAt(str, at){
  return str.split(at)[0];
}
console.log(breakAt('john-hops-over-the-candlestick', '-'));
console.log(breakAt('john-hops-over-the-candlestick', 'john'));

1
这将返回“hops-over-the-candlestick”,而不是“john”。 - Troy Gizzi
抱歉,我想它已经修好了。 - StackSlave

2
以下的truncateAt函数应该可以满足你的需求。

var string1 = 'john';
var string2 = 'john-hops-over-the-candlestick';
var string3 = 'john hops over the candlestick';

function truncateAt(str, char) {
  var idx = str.indexOf(char);
  return idx === -1 ? str : str.substr(0, idx);
}

console.log(truncateAt(string1, '-'));
console.log(truncateAt(string2, '-'));
console.log(truncateAt(string3, '-'));


很酷,谢谢你的检查。但是你的方法更聪明、更简洁。 - Troy Gizzi
我删除了我的评论,因为性能基准在后续运行中不断变化,但无论如何,这里还是有它的 :) http://jsperf.com/regex-vs-substr-with-indexof - Phil
1
只是出于好奇,我暂时添加了一个针对 split('-')[0] 的测试用例,并且也运行了几次。与其他两种方法相比,split 的吞吐量始终在同一范围内。 - Troy Gizzi

1
you can use split();
var str = 'john-sample';        
var substr = str.split('-');
fname = substr[0];
alert(fname);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接