JavaScript从字符串获取名字和姓氏作为数组

时间:2019-02-05 00:12:34

标签: javascript

我有一个具有以下格式的字符串:<strong>FirstName LastName</strong> 如何将其更改为具有第一个元素firstName和第二个lastName的数组?

我这样做了,但是没有运气,它不会产生正确的结果:

var data = [myString.split('<strong>')[1], myString.split('<strong>')[2]]

如何为具有该格式的任何字符串生成["firstName", "lastName"]

5 个答案:

答案 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);

    }
});