我有一个具有以下格式的字符串:<strong>FirstName LastName</strong>
如何将其更改为具有第一个元素firstName和第二个lastName的数组?
我这样做了,但是没有运气,它不会产生正确的结果:
var data = [myString.split('<strong>')[1], myString.split('<strong>')[2]]
如何为具有该格式的任何字符串生成["firstName", "lastName"]
?
答案 0 :(得分:4)
为了解析HTML,请使用DOM本身中最好的HTML解析器!
// create a random element, it doesn't have to be 'strong' (e.g., it could be 'div')
var parser = document.createElement('strong');
// set the innerHTML to your string
parser.innerHTML = "<strong>FirstName LastName</strong>";
// get the text inside the element ("FirstName LastName")
var fullName = parser.textContent;
// split it into an array, separated by the space in between FirstName and LastName
var data = fullName.split(" ");
// voila!
console.log(data);
编辑
正如@RobG所指出的,您也可以明确地使用DOM parser而不是元素:
var parser = new DOMParser();
var doc = parser.parseFromString("<strong>FirstName LastName</strong>", "text/html");
console.log(doc.body.textContent.split(" "));
但是,两种方法都可以很好地工作。一切都取决于偏好。
答案 1 :(得分:1)
只需匹配<strong>
和</strong>
之间的所有内容。
var matches = "<strong>FirstName LastName</strong>".match(/<strong>(.*)<\/strong>/);
console.log(matches[1].split(' '));
答案 2 :(得分:1)
首选方法是使用DOM
方法;创建一个元素并获取.textContent
,然后匹配一个或多个文字字符或空格分隔符。
let str = '<strong>FirstName LastName</strong>';
let [,first, last] = str.split(/<[/\w\s-]+>|\s/g);
console.log(first, last);
/<[/\w\s-]+>|\s/g
将<
后面跟一个或多个单词,空格或破折号字符分隔,然后将>
个字符或空格分隔为字符串中各个单词之间的空格。
解构分配中的逗号运算符,
用于从.split()
["", "FirstName", "LastName", ""]
的结果中省略该索引。
答案 3 :(得分:0)
这是我解决问题的方法。希望对您有帮助!
var str = "<strong>FirstName LastName</strong>";
var result = str.slice(0, -9).substr(8).split(" ");
编辑:仅适用于该特定示例。
答案 4 :(得分:-1)
另一种方法来执行此操作,以防您遇到HTML以外的东西
// Resizes text to fit name lengths
companyNameLabel.textProperty().addListener((observable, oldValue, newValue) -> {
Text tmpText = new Text(newValue);
tmpText.setFont(Font.font("Oxygen", 72));
double textWidth = tmpText.getLayoutBounds().getWidth();
// Check if text width is greater than maximum width
if (textWidth > 470) {
// Change font size to fit within 470
double newFontSize = 72 * 470 / textWidth;
companyNameLabel.setFont(Font.font("Oxygen", newFontSize));
// Finds y value for vertical centering
double labelHeight = companyNameLabel.getHeight();
System.out.println(labelHeight);
companyNameLabel.setLayoutY(155 - labelHeight / 2);
}
});